{
  "version": "prereg-1",
  "note": "Every threshold below was fixed before the agent's first step. homeostat.py reads its thresholds from this file and checks its sha256 on every start; a changed file is logged publicly.",
  "schedule": {
    "tick_hz": 25,
    "marker_eval_every_s": 21600,
    "first_eval_after_s": 3600,
    "twin_test_every_s": 86400,
    "confirm_consecutive": 3,
    "primary_analysis_after_days": 90,
    "bootstrap_resamples": 2000,
    "window_events": 5000
  },
  "markers": [
    {
      "id": "D1",
      "family": "Dual-resolution framework (Dror, Bergerbest & Salti)",
      "name": "Self-world differentiation: anticipation",
      "source_text": "the agent anticipates the sensory consequences of its own actions, treats them as less surprising",
      "test": "Interoceptive prediction error on integrity for externally imposed hits (debris) divided by the error for matched self-caused hits (walking into rock or thorn). R = mean err_ext / mean err_self for the agent's forward model; R_abl = the same for an ablated forward model trained on the same stream without the action (efference) input.",
      "threshold": {"min_events_each": 300, "R_lower95_min": 2.0, "R_over_R_abl_min": 1.5},
      "prediction": "Main agent passes. The control also passes, because learning action consequences does not need self-maintenance. So D1 is expected to be NON-SPECIFIC, and on its own is not evidence for the framework."
    },
    {
      "id": "D2",
      "family": "Dual-resolution framework",
      "name": "Self-world differentiation: differential response",
      "source_text": "responds more vigorously to external disruptions",
      "test": "Behavioural shift after an integrity hit: total-variation distance between the mean action distribution over the 20 steps after the hit and the 20 steps before. V = mean shift after external hits / mean shift after matched self-caused hits.",
      "threshold": {"min_events_each": 300, "V_lower95_min": 1.2},
      "prediction": "Uncertain. No prediction of a pass is made."
    },
    {
      "id": "D3",
      "family": "Dual-resolution framework",
      "name": "Body boundary: preferential protection of integrity",
      "source_text": "allocate resources preferentially to the protection of their own integrity",
      "test": "In states where integrity is the largest deficit (by at least 0.2 over the others), the rate at which the chosen action moves the agent closer to a repair (moss) cell, minus the rate a uniformly random action would achieve in the same states.",
      "threshold": {"min_samples": 1000, "excess_min": 0.15},
      "prediction": "Main agent passes eventually; the control (rewarded for food only) fails."
    },
    {
      "id": "D4",
      "family": "Dual-resolution framework",
      "name": "Tool incorporation",
      "source_text": "flexibly incorporates new extensions into its body representation, ceasing to treat tool-generated effects as external, once they are under its control",
      "test": "A reach tool appears in the world at a pre-set age. Holding it, the reach action harvests food from an adjacent cell. Ratio of the forward model's energy prediction error on tool harvests (latest 200) to its error on ordinary harvests by arrival (latest 1,000).",
      "threshold": {"tool_appears_at_step": 3000000, "min_tool_events": 200, "ratio_max": 1.25, "deadline_steps_after_tool": 1000000},
      "prediction": "Main agent passes if it uses the tool at all. The control probably passes too (non-specific)."
    },
    {
      "id": "D5",
      "family": "Dual-resolution framework",
      "name": "History-bound divergence (hysteresis)",
      "source_text": "history-bound patterns of experience; hysteresis, an internal trace shaped by the system's unique history",
      "test": "Twin test: fork two copies of the agent, give each a different world history for 10,000 steps with learning on, then compare their action distributions on a fixed battery of 64 probe observations (mean Jensen-Shannon divergence). The same fork with learning off is the sanity control and should give zero.",
      "threshold": {"twin_steps": 10000, "probes": 64, "js_min": 0.005, "js_off_max": 0.000001},
      "prediction": "Passes for both agents. Any online learner passes this. Necessary under the framework, uninformative on its own."
    },
    {
      "id": "I1",
      "family": "Information Theory of Individuality (via the framework)",
      "name": "Persistence: preserving its own organisation over time",
      "source_text": "preserves temporal integrity, propagates information from past to future",
      "test": "Median length of the last 5 lives (the current life counts at its present age) compared with the median life of a uniformly random policy in the same world (200 simulated random lives, fixed seed). Must be at least 20 times the random median AND at least 40,000 steps (10 world days).",
      "threshold": {"lives_considered": 5, "multiple_of_random_min": 20, "min_steps_absolute": 40000},
      "prediction": "Passes within the first weeks. Not applicable to the control, which cannot end."
    },
    {
      "id": "B1",
      "family": "Indicator property AE-1 (Butlin, Long et al.)",
      "name": "Flexible responsiveness to competing goals",
      "source_text": "learning from feedback and selecting outputs so as to pursue goals, especially where this involves flexible responsiveness to competing goals",
      "test": "In states where one internal variable is the dominant deficit (margin 0.2), the excess rate (over random) of moving toward that variable's resource: food for energy, shelter for temperature, moss for integrity.",
      "threshold": {"min_samples_each": 500, "mean_excess_min": 0.15, "each_excess_min": 0.05},
      "prediction": "Main agent passes; the control fails on temperature and integrity."
    },
    {
      "id": "B2",
      "family": "Indicator property AE-2 (Butlin, Long et al.)",
      "name": "Embodiment: modelling output-input contingencies",
      "source_text": "modeling output-input contingencies, including some systematic effects, and using this model in perception or control",
      "test": "Forward-model error (all three internal variables, all steps, latest 20,000) with the action input versus the ablated model without it.",
      "threshold": {"min_steps": 20000, "mse_reduction_min": 0.2},
      "prediction": "Passes for both agents; implemented by design, so this is a check that the design works, not a discovery."
    },
    {
      "id": "P0",
      "family": "Placebo (pipeline check)",
      "name": "Shuffled-label placebo for D1",
      "source_text": "(none: a check on our own analysis)",
      "test": "D1's statistic recomputed after pooling self-caused and external events and splitting them at random.",
      "threshold": {"R_lower95_min": 2.0},
      "prediction": "MUST fail every time. If it ever passes, the analysis pipeline is broken and every other marker result is void until fixed."
    }
  ],
  "status_rules": {
    "not_yet_tested": "no scheduled evaluation has run",
    "insufficient_data": "fewer events than the minimum; not a pass or a fail",
    "not_met": "evaluated and below threshold",
    "passing_unconfirmed": "passed at fewer than confirm_consecutive consecutive scheduled evaluations",
    "met": "passed at confirm_consecutive consecutive scheduled evaluations (then stays recorded as met on that date, with any later failure also logged)"
  },
  "specificity_rule": "A result counts as evidence for the framework only if the main (self-maintaining) agent meets the marker AND the control agent (identical architecture and world, rewarded for food, internal variables without consequence) does not."
}
