{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "PreyLab DNA v4",
  "description": "One fully resolved version 4 PreyLab genome. All family alleles are required.",
  "oneOf": [
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "flagellar-alga"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "biomassDensity",
            "divisionTempo",
            "foodEnergy",
            "debrisMetabolism",
            "crossAffinity",
            "fusionCapacity",
            "matingType",
            "pigmentR",
            "pigmentG",
            "pigmentB",
            "storageInvestment",
            "reserveAllocation",
            "mobilization",
            "dormancy",
            "coatInvestment",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "photosyntheticInvestment",
            "nutrientUptake",
            "thermalOptimum",
            "adhesion",
            "photoGlowThreshold",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "biomassDensity": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Mass packed into the body. More mineral biomass for offspring, grazers and carrion Cost: More mineral needed for growth and extra upkeep above 1. Unit: relative mineral mass. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "foodEnergy": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.6,
              "description": "Recoverable prey fuel fraction. Sets the fraction of this cell’s actual usable and reserve energy a grazer can store after capture (45–100%) Cost: Higher recoverability raises upkeep; it does not create extra fuel. Unit: relative recovery. Default: 1."
            },
            "debrisMetabolism": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Suspended debris assimilation. At 0.5 or above, uses finite local detritus for energy and suppresses photosynthetic gain Cost: Forfeits light conversion while active; the existing detritus conversion is unchanged. Unit: pathway expression. Default: 0."
            },
            "crossAffinity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ability to exchange genes on contact. Compatible mature algae can store a partner genome for a hybrid daughter at the next division Cost: Maintaining exchange machinery raises upkeep. Unit: contact compatibility. Default: 0."
            },
            "fusionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Compatible fusion cycle. At high expression, pays body material and energy to release viable algae gametes Cost: Finite gametes spend parent material and energy. Unit: gamete investment. Default: 0."
            },
            "matingType": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Fusion compatibility. Gametes of the same algae group but opposite type can fuse Cost: No direct cost. Unit: compatibility type. Default: 0."
            },
            "pigmentR": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Inherited pigment red. Crossed algae can inherit a mixed body color Cost: Visual trait only. Unit: red channel. Default: -1."
            },
            "pigmentG": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Inherited pigment green. Crossed algae can inherit a mixed body color Cost: Visual trait only. Unit: green channel. Default: -1."
            },
            "pigmentB": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Inherited pigment blue. Crossed algae can inherit a mixed body color Cost: Visual trait only. Unit: blue channel. Default: -1."
            },
            "storageInvestment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Chemical storage tissue. Adds up to 80 energy units of capacity; storage tissue needs extra structural mineral Cost: Raises body mass target and maintenance. Unit: reserve capacity. Default: 0."
            },
            "reserveAllocation": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Photosynthate diverted into reserves. Stores a fraction of energy gained after upkeep, at 80% efficiency Cost: Less immediately usable energy for growth and division. Unit: surplus allocation. Default: 0."
            },
            "mobilization": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Reserve mobilization. Releases stored energy below 35 usable energy, at 85% efficiency Cost: Reserve energy is lost during conversion. Unit: release rate. Default: 0."
            },
            "dormancy": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Reversible cyst formation. At high expression, prolonged local scarcity can trigger a costly dormant state Cost: Entry and germination spend energy; dormant cells still pay maintenance. Unit: cyst tendency. Default: 0."
            },
            "coatInvestment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Constructed mineral covering. A built coat increases predator handling time on contact Cost: Construction consumes dissolved mineral and energy; upkeep rises. Unit: covering investment. Default: 0."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming thrust. Horizontal and vertical acceleration Cost: Active swimming spends energy. Unit: active thrust. Default: 0.35."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "photosyntheticInvestment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Light conversion capacity. Upper bound on photosynthetic gain Cost: Higher maintenance. Unit: light capacity. Default: 0.6."
            },
            "nutrientUptake": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Nutrient uptake capacity. Upper bound on local nutrient-supported gain Cost: Higher maintenance. Unit: medium uptake. Default: 0.55."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "adhesion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Compatible cell adhesion. Forms weak short-range bonds with other adhesive algae Cost: Maintaining the coating raises energy use. Unit: surface investment. Default: 0."
            },
            "photoGlowThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient-light glow switch. When ambient sensing is expressed, algae emit only at or below this local lamp level; higher values permit glow in brighter water Cost: Ambient receptor and light organ retain their existing upkeep. Unit: fraction of ambient light. Default: 0.18."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "ciliate-grazer"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "herbivorous-flagellate"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "raptorial-ciliate"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "apex-ciliate"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand",
            "cannibalism"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            },
            "cannibalism": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Same-family prey recognition. At 0.55 or above, permits hunting smaller members of the same hunter family Cost: Adds sensory upkeep when expressed. Unit: prey recognition. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "omnivorous-ciliate"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "openwater-hunter"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand",
            "cannibalism"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            },
            "cannibalism": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Same-family prey recognition. At 0.55 or above, permits hunting smaller members of the same hunter family Cost: Adds sensory upkeep when expressed. Unit: prey recognition. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "floor-ciliate-hunter"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "divisionTempo",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "flocking",
            "sensingRange",
            "feedingAperture",
            "processing",
            "storage",
            "acquisitionCapacity",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "divisionTempo": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.8,
              "description": "Growth and division pace. Changes biomass growth rate and minimum division age Cost: Faster division raises upkeep. Unit: relative rate. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming force. Faster approach and escape Cost: Raises active swimming use. Unit: ciliary thrust. Default: 0.6."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "flocking": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "3D schooling tendency. Blends alignment, cohesion and close-range separation with resource seeking Cost: Neighbor sensing raises maintenance. Unit: neighbor response. Default: 0."
            },
            "sensingRange": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Local prey detection. Extends bounded physical perception Cost: Raises maintenance. Unit: relative range. Default: 1."
            },
            "feedingAperture": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.6,
              "description": "Prey size limit. Admits larger individual prey Cost: Raises mouth maintenance. Unit: relative mouth. Default: 1.3."
            },
            "processing": {
              "type": "number",
              "minimum": 0.5,
              "maximum": 1.5,
              "description": "Food processing speed. Digests stored meals faster Cost: Raises processing cost. Unit: relative rate. Default: 1."
            },
            "storage": {
              "type": "number",
              "minimum": 0.6,
              "maximum": 1.6,
              "description": "Food capacity. Holds more prey material Cost: Raises maintenance. Unit: relative vacuole. Default: 1.2."
            },
            "acquisitionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Optional food DNA retention. Can retain one compatible donor locus after ingestion for later descendant integration when enabled Cost: Retention spends usable energy. Unit: fragment retention. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "amoeboid-prototype"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "thermalOptimum",
            "sporeInvestment",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming thrust. Horizontal and vertical acceleration Cost: Active swimming spends energy. Unit: active thrust. Default: 0.35."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "sporeInvestment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Asexual spore production. A mature decomposer may release finite spores from body reserves Cost: Each viable spore spends body material and energy. Unit: propagule investment. Default: 0."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "surface-glider-prototype"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "propulsion",
            "slowdownThreshold",
            "turnPersistence",
            "thermalOptimum",
            "sporeInvestment",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "propulsion": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Swimming thrust. Horizontal and vertical acceleration Cost: Active swimming spends energy. Unit: active thrust. Default: 0.35."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "turnPersistence": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Heading persistence. How slowly steering changes direction Cost: No direct extra energy cost. Unit: heading memory. Default: 0.55."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "sporeInvestment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Asexual spore production. A mature decomposer may release finite spores from body reserves Cost: Each viable spore spends body material and energy. Unit: propagule investment. Default: 0."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "passive-drifter-prototype"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "buoyancy",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "buoyancy": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Passive settling or rising. Changes current-driven vertical drift Cost: No active swim energy. Unit: vertical bias. Default: 0."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    },
    {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "format",
        "schemaVersion",
        "modelVersion",
        "family",
        "alleles"
      ],
      "properties": {
        "format": {
          "const": "preylab-dna"
        },
        "schemaVersion": {
          "const": 4
        },
        "modelVersion": {
          "const": 4
        },
        "family": {
          "const": "contractile-prototype"
        },
        "alleles": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "bodySize",
            "metabolicPace",
            "slowdownThreshold",
            "contractility",
            "thermalOptimum",
            "rhythmPhase",
            "rhythmStrength",
            "twilightPreference",
            "entrainment",
            "ambientSense",
            "lightPreference",
            "lightTolerance",
            "directionalSense",
            "spectralCenter",
            "spectralWidth",
            "chemicalSense",
            "organicProduction",
            "organicReception",
            "organicResponse",
            "alarmProduction",
            "alarmReception",
            "alarmResponse",
            "socialProduction",
            "socialReception",
            "socialResponse",
            "lightProgram",
            "organicProgram",
            "alarmProgram",
            "socialProgram",
            "releaseThreshold",
            "releaseGain",
            "releasePulse",
            "releaseCooldown",
            "releaseReserve",
            "toxinSynthesis",
            "toxinRelease",
            "irritantResistance",
            "motorResistance",
            "sensoryResistance",
            "detoxification",
            "disturbanceSense",
            "emissionCapacity",
            "emissionPower",
            "emissionBand"
          ],
          "properties": {
            "bodySize": {
              "type": "number",
              "minimum": 0.7,
              "maximum": 1.5,
              "description": "Target mature body size. Radius and structural biomass target Cost: Larger bodies pay more maintenance. Unit: relative radius. Default: 1."
            },
            "metabolicPace": {
              "type": "number",
              "minimum": 0.8,
              "maximum": 1.2,
              "description": "Inherited metabolic pace. Scales upkeep and resource processing Cost: Higher pace spends more energy even when food is scarce. Unit: relative pace. Default: 1."
            },
            "slowdownThreshold": {
              "type": "number",
              "minimum": 10,
              "maximum": 70,
              "description": "Fuel slowdown ceiling. Active swimming tapers logarithmically below this energy level and reaches zero at empty fuel Cost: Active movement cost falls with effort; basal upkeep remains. Unit: energy / 100. Default: 35."
            },
            "contractility": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Contraction capacity. Sets contraction speed and cost Cost: Active contraction spends energy. Unit: stalk effort. Default: 0.6."
            },
            "thermalOptimum": {
              "type": "number",
              "minimum": 5,
              "maximum": 40,
              "description": "Temperature preference. Sets the peak of the temperature response Cost: Mismatch reduces usable gain. Unit: °C. Default: 22."
            },
            "rhythmPhase": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred internal phase. Rotates the inherited activity waveform Cost: No direct cost. Unit: cycle turn. Default: 0."
            },
            "rhythmStrength": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Daily rhythm strength. Modulates effort and rest without stopping upkeep Cost: Rest saves motion energy. Unit: activity bias. Default: 0."
            },
            "twilightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dawn and dusk preference. At high values gives two activity peaks per cycle Cost: No direct cost. Unit: two-window tendency. Default: 0."
            },
            "entrainment": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Clock adjustment from sensed light. Slowly nudges internal phase from local dawn and dusk Cost: Included in ambient sensing. Unit: local lamp response. Default: 0."
            },
            "ambientSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Ambient lamp sensing. Measures local brightness and change Cost: Sensor upkeep and body material. Unit: light investment. Default: 0."
            },
            "lightPreference": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Preferred local lamp level. Steers toward a bounded bright, dim or intermediate habitat when ambient sensing is expressed Cost: No extra cost beyond ambient sensing. Unit: 0–100 irradiance target. Default: 0.5."
            },
            "lightTolerance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Lamp habitat tolerance. Sets suitability half-width from 8 to 50 irradiance units; 1 is neutral and keeps legacy steering Cost: No extra cost beyond ambient sensing. Unit: response width. Default: 1."
            },
            "directionalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Biological light direction. Gives a coarse local signal bearing Cost: Sensor upkeep and body material. Unit: receptor investment. Default: 0."
            },
            "spectralCenter": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Detector color preference. Weights local biological signals by spectral match Cost: Included in detector upkeep. Unit: spectrum turn. Default: 0."
            },
            "spectralWidth": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 1,
              "description": "Detector bandwidth. Broad receptors receive more bands with less discrimination Cost: Included in detector upkeep. Unit: relative bandwidth. Default: 1."
            },
            "chemicalSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Dissolved nutrient sensing. Improves local mineral gradients; compound reception is inherited separately Cost: Sensor upkeep and body material. Unit: mineral receptor investment. Default: 0."
            },
            "organicProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "organicReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Organic volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "organicResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Organic volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "alarmProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "alarmReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Alarm volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "alarmResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Alarm volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "socialProduction": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile production. Permits finite material and energy paid release when an existing physiological trigger occurs Cost: Body material, upkeep and actual secretion cost. Unit: secretory capacity. Default: 0."
            },
            "socialReception": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Social volatile reception. Samples this compound locally with overlapping affinity to other registered compounds Cost: Body material and receptor upkeep. Unit: receptor capacity. Default: 0."
            },
            "socialResponse": {
              "type": "number",
              "minimum": -1,
              "maximum": 1,
              "description": "Social volatile response. Negative avoids a measured increase; positive approaches; zero detects without steering Cost: Response effort uses existing locomotion energy. Unit: signed steering. Default: 0."
            },
            "lightProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Biological light trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "organicProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Organic secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "alarmProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Alarm secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "socialProgram": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8
              ],
              "minimum": 0,
              "maximum": 8,
              "description": "Social secretion trigger. Chooses the local or internal input that can start this output; zero disables it Cost: Regulatory upkeep; output still spends finite resources. Unit: program. Default: 0."
            },
            "releaseThreshold": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Release activation threshold. Minimum local or internal input needed to start a pulse Cost: Higher thresholds conserve resources. Unit: input fraction. Default: 0.25."
            },
            "releaseGain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Requested output fraction. Scales requested light power or chemical secretion below apparatus capacity; zero requests none Cost: Higher output spends more material or fuel. Unit: output fraction. Default: 1."
            },
            "releasePulse": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse duration. Maps to 0.6–3.8 simulated seconds Cost: Long pulses can spend more fuel or material. Unit: duration setting. Default: 0.5."
            },
            "releaseCooldown": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Refractory recovery. Maps to 1–8 simulated seconds after a pulse Cost: Long recovery limits repeated release. Unit: recovery setting. Default: 0.55."
            },
            "releaseReserve": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Protected energy reserve. Active release stops at this remaining usable energy Cost: Conserves usable energy by suppressing signals. Unit: energy units. Default: 5."
            },
            "toxinSynthesis": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Finite toxin synthesis. Transfers body mineral into a small stored compound budget Cost: Body mineral, energy and apparatus upkeep. Unit: secretory investment. Default: 0."
            },
            "toxinRelease": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Triggered toxin release. Permits paid local release after threat or prey contact Cost: Finite stored compound and cooldown. Unit: release propensity. Default: 0."
            },
            "irritantResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Irritant resistance. Reduces irritant uptake, including self exposure Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "motorResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Motor toxin resistance. Reduces motor compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "sensoryResistance": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Sensory toxin resistance. Reduces sensory compound uptake Cost: Structural and maintenance investment. Unit: specific resistance. Default: 0."
            },
            "detoxification": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Toxin clearance. Speeds internal dose clearance Cost: Structural and processing energy. Unit: clearance investment. Default: 0."
            },
            "disturbanceSense": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Local motion and contact response. Responds to bounded nearby movement or contact Cost: Sensor upkeep and body material. Unit: motion investment. Default: 0."
            },
            "emissionCapacity": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse capacity. Allows short energy-paid biological light pulses Cost: Body material and upkeep. Unit: light organ. Default: 0."
            },
            "emissionPower": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Pulse brightness. Sets emitted intensity and energy expense Cost: Usable energy per pulse. Unit: pulse effort. Default: 0."
            },
            "emissionBand": {
              "type": "number",
              "minimum": 0,
              "maximum": 1,
              "description": "Emitted color band. Sets pulse spectrum Cost: Included in emission cost. Unit: spectrum turn. Default: 0."
            }
          }
        },
        "display": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 80
            },
            "description": {
              "type": "string",
              "maxLength": 500
            }
          }
        },
        "notes": {
          "type": "string",
          "maxLength": 1000
        }
      }
    }
  ]
}
