{
  "rfc": "0001-linear-atoms",
  "title": "Linear atom chain · EZZIE → PHI → THERMO",
  "version": "1",
  "chain": "linear",
  "never_exit": true,
  "ride": "BGF",
  "ground": "BGS",
  "wbs": {
    "name": "Web BGS",
    "role": "host ground · chain never exits · only field_one live",
    "value": 1
  },
  "wbf": {
    "name": "Web BGF",
    "role": "measure step · (step_index - prev)|1 · auto hotswap driver",
    "value": 0
  },
  "sdf_between": {
    "role": "boundary Host↔SPV and SPV↔SPV",
    "law": "SDF out at end of each SPV · handoff free never folds into next field until Host measures BGF"
  },
  "push_constants_schema": {
    "seed": "u32",
    "step": "u32",
    "wbf": "i32",
    "wbs": "i32",
    "scale": "i32",
    "temp_mC": "i32",
    "handoff_field": "i32",
    "handoff_free": "u32"
  },
  "steps": [
    {
      "i": 0,
      "kind": "SPV",
      "plug": "ezzie",
      "socket": "ui.stage",
      "push": { "seed": 7, "mode": "eor" },
      "end": "SDF_OUT"
    },
    {
      "i": 1,
      "kind": "SDF_OUT",
      "role": "boundary",
      "push": { "handoff": "field_free" },
      "next": 2
    },
    {
      "i": 2,
      "kind": "SPV",
      "plug": "phi",
      "socket": "ui.stage",
      "push": { "scale": 3, "seed": 7 },
      "end": "SDF_OUT"
    },
    {
      "i": 3,
      "kind": "SDF_OUT",
      "role": "boundary",
      "next": 4
    },
    {
      "i": 4,
      "kind": "SPV",
      "plug": "thermo",
      "socket": "ui.stage",
      "push": { "temp_mC": 45000, "seed": 7 },
      "end": "SDF_OUT"
    },
    {
      "i": 5,
      "kind": "SDF_OUT",
      "role": "boundary_loop",
      "next": 0,
      "note": "never exit · linear loop · WBS holds host"
    }
  ]
}
