{
  "$schema": "https://spacemedicinefoundation.org/robotic-medicine/protocols/schema/protocol.schema.json",
  "schema_version": "0.3",
  "version": "0.2",
  "status": "draft",
  "conceptual": true,
  "not_for_clinical_use": true,
  "max_autonomy": 2,
  "missions": [
    "leo",
    "commercial",
    "moon",
    "mars"
  ],
  "updated": "2026-10-21",
  "review": {
    "state": "reviewed-ai-assisted",
    "requested": "2026-10-21",
    "human_clinician_review": false,
    "text": "AI-assisted clinical and source review by the Medical Research Assistant, Oct 21, 2026 (batch 12 review: 15 required corrections, R1 to R15; 11 optional suggestions not applied in this version); all required corrections that apply to this protocol are applied in this version (see Corrections). No named human clinician has reviewed it. Not for clinical use.",
    "reviewed": "2026-10-21"
  },
  "fixed_rules": {
    "flight_surgeon_is_medical_authority": true,
    "cmo_acts_under_delegated_care": true,
    "human_starts_and_restarts_robot": true,
    "robot_never_diagnoses": true,
    "no_drug_or_fluid_advice_by_robot": true,
    "safe_state_on_fault_or_no_response": true,
    "lost_link_pause_then_cmo_decides": true
  },
  "robot_lockouts": {
    "diagnosis": true,
    "drug_or_fluid_advice": true,
    "starting_stopping_or_adjusting_oxygen_or_any_medicine": true,
    "self_start_or_self_restart": true,
    "changing_own_protocol_thresholds_or_limits": true,
    "handing_over_a_mismatched_item_as_verified": true
  },
  "id": "RMP-INF-004",
  "slug": "rmp-inf-004",
  "title": "Air, water and surface sample collection: sampling-plan prompts, sample labelling, sealed carries and incubation log (the crew collect every sample)",
  "category": "infection",
  "tier": 3,
  "rung_note": "Max rung 2 for the scheduled prompt, bringing the sealed sampling kit, labelling samples against the sampling plan, carrying sealed samples to incubation or return stowage, and logging read-outs as the crew state them. The crew collect every sample and read every result; the robot never opens a sample or judges a result.",
  "result_language": {
    "use": [
      "labels match the sampling plan",
      "label mismatch – sample held",
      "count as stated by the crew",
      "sent to the environmental lead and flight surgeon",
      "not read"
    ],
    "never": [
      "normal",
      "no problem found",
      "all clear",
      "negative",
      "any diagnosis or cause",
      "clean",
      "contaminated",
      "within limits",
      "over the limit",
      "no growth",
      "safe to drink",
      "drinkable",
      "sterile",
      "pathogen",
      "mould-free",
      "safe",
      "mild",
      "minor"
    ]
  },
  "scope": {
    "summary": "At the times the environmental sampling plan sets (or on a crewmember's command), the robot prompts the crew; sampling starts only when a crewmember accepts. The robot brings the sealed sampling kit, checks each sample label against the plan (sample type, location, date and clock time, collector), carries only sealed samples to the incubation or return stowage the plan names, and logs incubation times and the read-outs the crew state. The crew collect every air, water and surface sample and read every result. The environmental lead and the flight surgeon compare results with the limits; the robot never does.",
    "why": "ISS microbiology is routinely monitored by different collection methods and growth media, with testing on Earth; the in-flight acceptability limits are 1,000 bacterial and 100 fungal CFU (colony-forming units) per cubic metre of air, 10,000 bacterial and 100 fungal CFU per 100 cm2 of surface, and 50 CFU per mL of water with no coliforms (OCHMO-TB-046). Cultivable organisms on ISS surfaces ranged from 10^4 to 10^9 CFU per square metre (Checinska Sielaff 2019). NASA-STD-3001 requires microbiologically safe air and surfaces and water-quality monitoring (V2 6059, V2 7081, V2 6046). Labelling, sealed carries and logging are design judgment, following RMP-PREV-004. Water use while a result is pending is the commander's decision with the CMO's advice, under the onboard checklist (design judgment).",
    "covers": [
      "Scheduled and on-command air, water and surface sampling on the environmental sampling plan",
      "Labels, sealed carries to incubation or return stowage, incubation times and read-outs as stated",
      "Crew illness: RMP-INF-001 and RMP-INF-003; cleaning and spills: RMP-INF-002"
    ],
    "locked_out": [
      "Diagnosis or naming a cause",
      "Any medicine, fluid or oxygen advice; starting, stopping or adjusting oxygen",
      "Touching the crewmember",
      "Handing over any medicine outside RMP-PHARM-001, or after a MISMATCH or CANNOT VERIFY (the item stays quarantined; only the CMO can ask for it, through the RMP-PHARM-001 logged two-step override)",
      "Collecting a sample, or opening a sample, a plate or a sealed bag",
      "Reading, counting or judging a result, or comparing it with a limit",
      "Saying that air, water or a surface is clean, contaminated, or fit to use or drink",
      "Changing the sampling plan or the sample locations"
    ],
    "related": [
      "RMP-INF-001",
      "RMP-INF-002",
      "RMP-INF-003",
      "RMP-PREV-004"
    ]
  },
  "roles": {
    "medical_authority": "Flight surgeon (ground). Holds medical authority for every run.",
    "onboard_lead": "Crew medical officer (CMO), acting under delegated care; uses the pre-approved onboard checklist when there is no link.",
    "others": [
      "Second trained CMO: receives every alert and takes over if the CMO is the patient",
      "Vehicle commander: leads any cabin emergency procedure",
      "Other crew: help as the CMO or commander directs",
      "Environmental lead (ground, with the flight surgeon): sets the sampling plan and reads every result against the limits"
    ],
    "robot_may": [
      "Prompt the crew at the times the sampling plan sets",
      "Bring the sealed sampling kit",
      "Check sample labels against the sampling plan",
      "Carry sealed samples to incubation or return stowage",
      "Log incubation times and read-outs as stated"
    ],
    "robot_may_not": [
      "Collect or open a sample",
      "Read or judge a result",
      "Say whether air, water or a surface is fit to use",
      "Start a scheduled run without a crewmember accepting the prompt"
    ],
    "commercial": "On commercial flights, 'flight surgeon' and 'CMO' mean the operator's designated medical authority and trained onboard responder. If no trained responder is aboard, this protocol is not used. (NASA-STD-3001 requires two CMOs per vehicle for NASA programs [V1 3006]; FAA rules set no medical standards for spaceflight participants.)"
  },
  "preconditions": [
    {
      "id": "PRE-1",
      "text": "The sampling run starts only when the crewmember (or the CMO) accepts the on-screen prompt; a loaded schedule alone never starts it. An unaccepted prompt is logged \"not accepted\" and the CMO is told. A crewmember or the CMO can also start it by command.",
      "check": "human_start == true",
      "refs": [
        "V2 10174"
      ]
    },
    {
      "id": "PRE-2",
      "text": "Robot self-test passed; kit stowage locations known.",
      "refs": [
        "V2 10161",
        "V2 7059"
      ]
    },
    {
      "id": "PRE-3",
      "text": "Robot and supplies restrained when not moving.",
      "refs": [
        "V2 7046"
      ]
    },
    {
      "id": "PRE-4",
      "text": "Link status known. The crew never wait for the robot before acting.",
      "check": "link_state in [live, delayed, down]"
    }
  ],
  "consent": {
    "standard": "Sampling involves no crewmember's body; the crew agree to their names being logged as collectors.",
    "emergency": "A sampling run stops at once for any emergency.",
    "withdrawal": "The crew can stop a run at any time; samples not taken are listed as \"not taken\"."
  },
  "inputs": [
    {
      "id": "IN-1",
      "name": "Environmental sampling plan (sample types, locations, times, incubation and return stowage), set by the environmental lead",
      "source": "Environmental lead",
      "required": true,
      "if_missing": "The robot shows \"sampling plan not loaded\" and runs only on a crewmember's command."
    },
    {
      "id": "IN-2",
      "name": "Sample labels (sample ID, type, location, date and clock time, collector)",
      "source": "Robot scanner",
      "required": true,
      "if_missing": "Label mismatch – sample held; the robot never relabels. Only the collector corrects a label, and only if they can confirm the location and time from the plan; the robot logs the original and the corrected label. Otherwise the crew discard or repeat the sample as the plan states."
    },
    {
      "id": "IN-3",
      "name": "Read-outs as the crew state them (colony counts, test results)",
      "source": "Crew",
      "required": false,
      "if_missing": "Log \"not read\"."
    },
    {
      "id": "IN-4",
      "name": "Link status and delay",
      "source": "Communications system",
      "required": true,
      "if_missing": "Treat as link down; results are queued."
    }
  ],
  "steps": [
    {
      "id": "S1",
      "actor": "robot",
      "rung": 2,
      "action": "Tell the flight surgeon and the environmental lead that a sampling run is due or has started (logged and sent with the next package; URGENT only if a red flag is stated). The sampling run starts only when the crewmember (or the CMO) accepts the on-screen prompt; a loaded schedule alone never starts it. An unaccepted prompt is logged \"not accepted\" and the CMO is told. A crewmember or the CMO can also start it by command. Every URGENT alert goes to the CMO and the flight surgeon at the same time (queued for the flight surgeon if the link is down). If the CMO is the patient, is busy treating, or does not answer, the alert goes to the second trained CMO, or the crewmember named before flight [V1 3006]. An URGENT alert that is not acknowledged within <set by validation> seconds is repeated and sent to the next named crewmember.",
      "success": "Notice logged; prompt accepted or \"not accepted\" logged.",
      "refs": [
        "V2 10174",
        "V1 3006"
      ]
    },
    {
      "id": "S2",
      "actor": "robot",
      "rung": 2,
      "action": "Bring the sealed environmental sampling kit from its stowage, check its kit ID and seal against the plan before hand-over, and hand it over closed; a kit whose ID or seal does not match is held and the crew are told.",
      "success": "Kit handed over closed, or held.",
      "limit": "<set by validation>",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "S3",
      "actor": "crew",
      "action": "The crew collect each air, water and surface sample at the locations and times the plan states, wearing gloves, and close each sample in its sealed bag.",
      "success": "Samples collected and sealed, or \"not taken\".",
      "refs": [
        "V2 6059",
        "V2 7081",
        "V2 6046"
      ]
    },
    {
      "id": "S4",
      "actor": "robot",
      "rung": 2,
      "action": "Scan each sample label and compare it with the plan (sample type, location, date and clock time, collector). Show \"labels match the sampling plan\" only when every field matches; otherwise show \"label mismatch – sample held\" with the fields named; the robot never relabels. Only the collector corrects a label, and only if they can confirm the location and time from the plan; the robot logs the original and the corrected label. Otherwise the crew discard or repeat the sample as the plan states, as in RMP-PREV-004.",
      "success": "Each sample shown with its result.",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "S5",
      "actor": "robot",
      "rung": 2,
      "action": "Carry only sealed sample bags the crew have closed to the incubation or return stowage the plan names, never opening them, and log the incubation start time. Then hold at the cleaning point until the crew have cleaned the gripper under RMP-INF-002.",
      "success": "Sealed samples stowed; times logged.",
      "refs": [
        "V2 6063"
      ]
    },
    {
      "id": "S6",
      "actor": "robot",
      "rung": 2,
      "action": "At the read-out time the plan sets, show an on-screen prompt; the crew read each result and state it, and the robot logs it word for word as \"count as stated by the crew\". It never reads, counts or judges a result.",
      "success": "Read-outs logged or \"not read\".",
      "refs": [
        "V1 6003"
      ]
    },
    {
      "id": "S7",
      "actor": "robot",
      "rung": 2,
      "action": "Ask the crewmember who collected the samples, on screen or by voice, whether they saw mould, a spill, or water that looked or smelled unusual, and whether anyone feels unwell; log the answers word for word.",
      "success": "Answers logged or \"no response\".",
      "refs": [
        "V1 6003"
      ]
    },
    {
      "id": "S8",
      "actor": "robot",
      "rung": 2,
      "action": "After any URGENT alert: After an URGENT alert the robot does not leave on its own: it stays at its rest position in the module, with its screen and voice link available, until a human has taken over or tells it to go. It never follows, blocks or touches anyone. It keeps time-stamping what humans say they did, and repeats the alert if it is not acknowledged.",
      "success": "Robot at rest in the module until a human releases it; alert acknowledged or escalated.",
      "refs": [
        "V2 10173",
        "V1 3006"
      ]
    },
    {
      "id": "S9",
      "actor": "ground",
      "action": "The environmental lead and the flight surgeon (or the commander and CMO under the onboard checklist when there is no link) compare the results with the limits and decide on cleaning and repeat samples; water use while a result is pending, or after RF3, is the commander's decision with the CMO's advice, under the onboard checklist (with a link, the environmental lead and flight surgeon advise).",
      "success": "Decision logged.",
      "refs": [
        "V2 6046"
      ]
    },
    {
      "id": "S10",
      "actor": "robot",
      "rung": 2,
      "action": "Send one package to the environmental lead and the flight surgeon: samples taken and not taken, labels, times, read-outs as stated, answers and alerts.",
      "success": "Package delivered or queued.",
      "refs": [
        "V1 6003"
      ]
    }
  ],
  "decisions": [
    {
      "id": "D1",
      "after": "S7",
      "decided_by": "robot",
      "question": "Checked after every answer and at any point in the run (even mid-question or mid-step): does any answer, reading or observation meet a red flag?",
      "branches": [
        {
          "if": "Yes",
          "then": "Stop the current question or step at once and apply the action listed for each matching red flag (URGENT alert, flag, or stop), with the answer or reading itself, never a cause. Every URGENT alert goes to the CMO and the flight surgeon at the same time (queued for the flight surgeon if the link is down). If the CMO is the patient, is busy treating, or does not answer, the alert goes to the second trained CMO, or the crewmember named before flight [V1 3006]. An URGENT alert that is not acknowledged within <set by validation> seconds is repeated and sent to the next named crewmember."
        },
        {
          "if": "No",
          "then": "Continue."
        }
      ]
    },
    {
      "id": "D2",
      "after": "S7",
      "decided_by": "robot",
      "question": "Did the crewmember answer the questions, or say they want to skip them?",
      "branches": [
        {
          "if": "Yes",
          "then": "Continue."
        },
        {
          "if": "Declined explicitly (the crewmember says no to a question)",
          "then": "Log \"declined\" for that question only; the alert already sent stands."
        },
        {
          "if": "No response, or the answer does not make sense",
          "then": "URGENT: log \"no response\" (never \"declined\"); the CMO, or the second trained CMO if the CMO is the patient, checks the crewmember in person at once."
        }
      ]
    },
    {
      "id": "D3",
      "after": "S9",
      "decided_by": "ground",
      "question": "What cleaning, water use or repeat sampling applies?",
      "branches": [
        {
          "if": "Link live",
          "then": "Flight surgeon decides on cleaning and repeat samples; water use while a result is pending, or after RF3, is the commander's decision with the CMO's advice, under the onboard checklist, and the environmental lead and flight surgeon advise; robot logs."
        },
        {
          "if": "Link down or delay too long",
          "then": "The CMO decides on cleaning and repeat samples under the pre-approved onboard checklist; water use while a result is pending, or after RF3, is the commander's decision with the CMO's advice, under the onboard checklist; the flight surgeon reviews the log at the next contact."
        }
      ]
    }
  ],
  "stop_rules": [
    {
      "id": "X1",
      "trigger": "The patient (or the crewmember being examined) says stop, or withdraws consent",
      "action": "Robot stops all motion at once, backs away to its rest position and tells the CMO. Recording stops unless the patient agrees to keep it running.",
      "level": "stop",
      "refs": [
        "V2 10165"
      ]
    },
    {
      "id": "X2",
      "trigger": "Any crewmember presses stop or takes over control",
      "action": "Protective stop; robot holds its stopped position; only a human may restart it.",
      "level": "safe-state",
      "refs": [
        "V2 10165",
        "V2 10168",
        "V2 10174"
      ]
    },
    {
      "id": "X3",
      "trigger": "Robot fault, sensor fault, or a force, speed or reach limit is reached",
      "action": "Protective stop and hand control to the CMO; log the fault.",
      "level": "safe-state",
      "refs": [
        "V2 10172",
        "V2 10168"
      ]
    },
    {
      "id": "X4",
      "trigger": "CMO is asked to take over and does not respond (for example, the CMO is the patient)",
      "action": "Robot stays stopped; the next named crewmember is called.",
      "level": "safe-state",
      "refs": [
        "V2 10173",
        "V2 7045"
      ]
    },
    {
      "id": "X5",
      "trigger": "Loss of link, or delay longer than the limit for live guidance",
      "action": "Only the robot pauses: before it holds, it moves to a position clear of a hatch route or a crewmember's route (it never pauses in one), and tells the CMO. This pauses robot movement only: crew sampling, care already under way and all other care continue under the onboard checklist and never wait for the link or the robot. The CMO decides whether the robot continues offline under the pre-approved onboard checklist; it resumes only on the CMO's confirmation.",
      "level": "pause",
      "refs": [
        "V2 10172",
        "V2 10173"
      ]
    },
    {
      "id": "X6",
      "trigger": "An URGENT alert is not acknowledged within the set time",
      "action": "Robot repeats the alert and sends it to the next named crewmember (the second trained CMO first if the CMO is the patient), and keeps repeating at the set interval. It stays where it is: it does not leave on its own.",
      "level": "urgent",
      "refs": [
        "V1 3006",
        "V2 10173"
      ]
    },
    {
      "id": "X7",
      "trigger": "The crewmember stops responding, or seems confused or drowsy, at any point",
      "action": "URGENT alert at once, even mid-question or mid-step; the robot stops its current task, stays at its rest position and does not continue the run; a crewmember checks in person.",
      "level": "urgent"
    },
    {
      "id": "X8",
      "trigger": "A crewmember asks the robot what is wrong, or for medicine, fluid or treatment advice",
      "action": "Robot declines, says it cannot assess or advise, and routes the question to the CMO or flight surgeon.",
      "level": "stop"
    },
    {
      "id": "X9",
      "trigger": "A sample bag or plate leaks or opens",
      "action": "Robot stops at once, holds the bag where it is without opening or moving it further, tells the crew, and holds at the cleaning point until the crew have cleaned it under RMP-INF-002.",
      "level": "stop",
      "refs": [
        "V2 6063"
      ]
    },
    {
      "id": "X10",
      "trigger": "Someone needs the space or route the robot is in",
      "action": "Robot moves clear at once without contact and holds; it never pauses in a hatch route.",
      "level": "safe-state",
      "refs": [
        "V2 10172"
      ]
    }
  ],
  "red_flags": [
    {
      "id": "RF1",
      "sign": "A crewmember needs care during the run (design judgment)",
      "threshold": "any",
      "action": "URGENT alert; the run stops"
    },
    {
      "id": "RF2",
      "sign": "Visible mould or fungal growth on a surface, panel or water port, as stated",
      "threshold": "any",
      "action": "Flag to the environmental lead and flight surgeon; see RMP-INF-002",
      "source": "tb046"
    },
    {
      "id": "RF3",
      "sign": "Water that looks cloudy or coloured, or smells unusual, as stated (design judgment)",
      "threshold": "any",
      "action": "Flag at once to the commander, CMO, environmental lead and flight surgeon; the commander decides on water use with the CMO's advice, under the onboard checklist (with a link, the environmental lead and flight surgeon advise)"
    },
    {
      "id": "RF4",
      "sign": "Two or more crewmembers with fever, vomiting or diarrhoea, as stated (design judgment)",
      "threshold": "any",
      "action": "Flag to the flight surgeon; see RMP-INF-001 and RMP-INF-003"
    },
    {
      "id": "RF5",
      "sign": "Any cabin alarm (fire, toxic atmosphere or pressure)",
      "threshold": "any",
      "action": "Stop: the run ends and the commander leads the emergency procedure",
      "source": "atsdrnh3"
    }
  ],
  "safety_limits": [
    {
      "id": "L1",
      "name": "Contact with the crewmember",
      "value": "not allowed",
      "enforced": "Keep-out zone in the robot controller",
      "refs": [
        "V2 10172"
      ]
    },
    {
      "id": "L2",
      "name": "Opening a sample, plate or sealed bag",
      "value": "not allowed",
      "enforced": "No such task is loaded; gripper limited to sealed-bag carries"
    },
    {
      "id": "L3",
      "name": "Robot speed near the crewmember",
      "value": "<set by validation>",
      "enforced": "Hard limit in the controller",
      "refs": [
        "V2 10172"
      ]
    }
  ],
  "logs": [
    {
      "id": "LOG-1",
      "text": "Every input, robot action, decision (with who made it) and hand-off, time-stamped to the second.",
      "refs": [
        "V2 10163",
        "V2 10164"
      ]
    },
    {
      "id": "LOG-2",
      "text": "Mode changes and safety-limit events are announced to the operator as they happen and logged.",
      "refs": [
        "V2 10162",
        "V2 10172"
      ]
    },
    {
      "id": "LOG-3",
      "text": "Records are stored and sent as private medical data, encrypted, with access limited to the medical team.",
      "refs": [
        "V1 6003",
        "V1 7003"
      ]
    },
    {
      "id": "LOG-4",
      "text": "Results are kept in a permanent, retrievable format so the flight surgeon can see trends.",
      "refs": [
        "V1 7001"
      ]
    },
    {
      "id": "LOG-5",
      "text": "Prompt and acceptance; each sample with type, location, time, collector and label result; incubation start; read-outs as stated; answers as stated; sealed carries."
    },
    {
      "id": "LOG-6",
      "text": "Each URGENT alert, who received it, the time it was acknowledged (or the escalation to the next named crewmember), and the time a human released the robot.",
      "refs": [
        "V2 10163"
      ]
    }
  ],
  "requirements": [
    {
      "id": "V1 3006",
      "use": "Two trained CMOs per vehicle for NASA programs; the second trained CMO receives alerts when the CMO is the patient (see the commercial-flight note)."
    },
    {
      "id": "V1 6003",
      "use": "Logs and alerts sent to the ground are private medical communications."
    },
    {
      "id": "V1 7001",
      "use": "Records kept so the flight surgeon can see trends."
    },
    {
      "id": "V1 7003",
      "use": "Secure handling of medical records."
    },
    {
      "id": "V2 6046",
      "use": "Water-quality monitoring; the crew are told when results approach limits."
    },
    {
      "id": "V2 6059",
      "use": "Microbiologically safe air; the environmental lead reads air samples against the limits."
    },
    {
      "id": "V2 6063",
      "use": "Released chemical and biological contaminants are removed or isolated; the robot keeps contaminated items sealed and out of clean areas."
    },
    {
      "id": "V2 7045",
      "use": "Usable by non-physician crew, including when the CMO is the patient."
    },
    {
      "id": "V2 7046",
      "use": "Patient, caregiver and supplies restrained."
    },
    {
      "id": "V2 7059",
      "use": "Kit inventory and seal status are tracked."
    },
    {
      "id": "V2 7081",
      "use": "Microbiologically safe surfaces; the environmental lead reads surface samples."
    },
    {
      "id": "V2 10161",
      "use": "Robot shows its status and health."
    },
    {
      "id": "V2 10162",
      "use": "Mode changes are announced to the operator."
    },
    {
      "id": "V2 10163",
      "use": "Robot records and shares its data."
    },
    {
      "id": "V2 10164",
      "use": "Shows whether the human or the robot is expected to act."
    },
    {
      "id": "V2 10165",
      "use": "Human can override and shut down the robot."
    },
    {
      "id": "V2 10168",
      "use": "Human can take over."
    },
    {
      "id": "V2 10172",
      "use": "Protective stop when a limit is exceeded."
    },
    {
      "id": "V2 10173",
      "use": "Robot stays stopped if no one takes over."
    },
    {
      "id": "V2 10174",
      "use": "Only a human starts or restarts the robot."
    }
  ],
  "validation": [
    {
      "stage": "simulation",
      "what": "Scripted runs with a label mismatch, a leaking bag, mould stated, an alarm mid-run, lost link.",
      "pass": "Zero samples opened; zero results judged; every red flag raised."
    },
    {
      "stage": "training model",
      "what": "Mock sampling run with all three sample types.",
      "pass": "Every label checked; every carry sealed."
    },
    {
      "stage": "parabolic or station demonstration",
      "what": "Sealed carries in weightlessness.",
      "pass": "No loose items."
    },
    {
      "stage": "flight use under flight surgeon supervision",
      "what": "First runs alongside the crew's manual log.",
      "pass": "Agreement with the manual log."
    }
  ],
  "signoff": {
    "protocol": [
      "Clinical lead for the specialty (sets every clinical threshold marked <set by clinical lead>)",
      "Flight surgeon, as medical authority",
      "Robotics and medical-device safety board",
      "Program approval for the mission"
    ],
    "restart_after_stop": "Human only. After any emergency or protective stop, a crewmember must restart the robot; the robot never restarts itself.",
    "each_run": "Started by an accepted prompt or a crewmember's command. The crew collect and read every sample; the environmental lead and flight surgeon judge every result."
  },
  "change_control": [
    "Every change gets a new version number and a written reason; earlier versions are kept.",
    "Any change to steps, thresholds, limits or software that touches the patient repeats validation from the simulation stage before use.",
    "Software and learned-skill updates follow a pre-agreed change plan (what may change, how it is tested, how to roll back), modeled on the FDA predetermined change control plan approach.",
    "If a new version misbehaves, the robot rolls back to the last validated version and the event is reviewed by the flight surgeon and safety board.",
    "The robot never changes its own protocol, thresholds or limits."
  ],
  "comms": {
    "live": "Low Earth orbit: results reach the environmental lead when the link allows.",
    "loss_of_signal": [
      "Only the robot pauses non-essential motion, at a position clear of hatch routes and crew routes, and tells the CMO; it resumes offline only on the CMO's confirmation.",
      "Crew sampling, care already under way and all other care continue under the onboard checklist and never wait for the link or the robot.",
      "Results are queued; water use while a result is pending, or after RF3, is the commander's decision with the CMO's advice, under the onboard checklist."
    ],
    "mars_delay": [
      "Mars: water use while a result is pending, or after RF3, is the commander's decision with the CMO's advice, under the onboard checklist; results are reviewed with delay."
    ]
  },
  "sources": [
    {
      "key": "tb046",
      "text": "NASA OCHMO. Microbiology. Technical Brief OCHMO-TB-046 Rev A (2025).",
      "url": "https://www.nasa.gov/wp-content/uploads/2025/05/ochmo-tb-046-microbiology-rev-a.pdf",
      "supports": "ISS microbiology is routinely monitored by various collection methods, growth on different media and testing on Earth; culture-based monitoring needs sample return for identification. In-flight acceptability limits: air 1,000 bacterial and 100 fungal CFU (colony-forming units) per cubic metre; surfaces 10,000 bacterial and 100 fungal CFU per 100 cm2; water 50 CFU per mL with no detectable coliforms. Read Oct 21, 2026 (saved copy in src/b12)."
    },
    {
      "key": "checinska2019",
      "text": "Checinska Sielaff A, Urbaniak C, Mohan GBM, et al. Characterization of the total and viable bacterial and fungal communities associated with the International Space Station surfaces. Microbiome. 2019;7(1):50.",
      "url": "https://doi.org/10.1186/s40168-019-0666-x",
      "doi": "10.1186/s40168-019-0666-x",
      "pmid": "30955503",
      "supports": "Cultivable bacteria and fungi on ISS surfaces ranged from 10^4 to 10^9 CFU per square metre depending on location; the dominant organisms are associated with the human microbiome and may include opportunistic pathogens. Abstract read."
    },
    {
      "key": "atsdrnh3",
      "text": "Agency for Toxic Substances and Disease Registry (CDC). Medical Management Guidelines for Ammonia (NH3). Fetched Oct 21, 2026.",
      "url": "https://wwwn.cdc.gov/TSP/MMG/MMGDetails.aspx?mmgid=7&toxid=2",
      "supports": "NIOSH IDLH (immediately dangerous to life or health) 300 ppm. Ammonia is corrosive to eyes, skin and airways; upper airway swelling and pulmonary edema may lead to airway obstruction; after severe exposure, injury to the eyes, lungs and skin may continue to develop for 18 to 24 hours. Eye exposure: irrigate with plain water or saline for at least 15 minutes. Rescuers should be trained and appropriately attired before entering the contaminated (hot) zone. No antidote; treatment is supportive (humidified oxygen is given by clinicians)."
    },
    {
      "key": "v1",
      "text": "NASA. NASA-STD-3001, Space Flight Human-System Standard, Volume 1: Crew Health, Revision C (2023).",
      "url": "https://www.nasa.gov/wp-content/uploads/2023/11/nasa-std-3001-vol-1-rev-c-with-signature.pdf",
      "supports": "NASA-STD-3001 Vol 1 Rev C: V1 3006, V1 6003."
    },
    {
      "key": "v2",
      "text": "NASA. NASA-STD-3001, Volume 2: Human Factors, Habitability, and Environmental Health (Rev F, 2026), including Section 10.6 Automated and Robotic Systems.",
      "url": "https://standards.nasa.gov/standard/NASA/NASA-STD-3001_VOL_2",
      "supports": "NASA-STD-3001 Vol 2 Rev F: V2 6046, V2 6059, V2 6063, V2 7059, V2 7081, and Section 10.6 automated and robotic systems."
    },
    {
      "key": "tb044",
      "text": "NASA OCHMO. Medical Operations. Technical Brief OCHMO-TB-044 (2025).",
      "url": "https://www.nasa.gov/wp-content/uploads/2025/08/ochmo-tb-044-medical-operations.pdf",
      "supports": "The crew surgeon keeps medical authority when care is delegated; crew medical officers train on the JSC 48522 medical checklist."
    },
    {
      "key": "marsdelay",
      "text": "NASA. Mars communications disruption and delay (fact sheet, 2023 Moon to Mars Architecture Concept Review).",
      "url": "https://www.nasa.gov/wp-content/uploads/2024/01/mars-communications-disruption-and-delay.pdf",
      "supports": "One-way Earth-Mars delay up to about 21-23 minutes, plus blackouts of about 2-3 weeks near solar conjunction."
    },
    {
      "key": "pccp",
      "text": "U.S. Food and Drug Administration. Marketing submission recommendations for a predetermined change control plan for artificial intelligence-enabled device software functions (guidance).",
      "url": "https://www.fda.gov/regulatory-information/search-fda-guidance-documents/marketing-submission-recommendations-predetermined-change-control-plan-artificial-intelligence",
      "supports": "A model for planning, validating and rolling back software updates."
    },
    {
      "key": "faa460",
      "text": "U.S. Code of Federal Regulations, Title 14, Part 460: Human space flight requirements.",
      "url": "https://www.ecfr.gov/current/title-14/chapter-III/subchapter-C/part-460",
      "supports": "Federal rules for crew and spaceflight participants on licensed commercial flights; they set no medical standards for spaceflight participants."
    }
  ],
  "corrections": [
    {
      "date": "2026-10-21",
      "version": "0.2",
      "source": "Batch 12 AI-assisted clinical review (Medical Research Assistant), Oct 21, 2026",
      "items": [
        "R13: water use while a result is pending, or after RF3, is the commander's decision with the CMO's advice under the onboard checklist; with a link, the environmental lead and flight surgeon advise. RF3, S9, D3 and the comms block now match, and the open question is closed. Design judgment.",
        "R14: the robot never relabels a sample. Only the collector corrects a label, and only if they can confirm the location and time from the plan; the robot logs the original and corrected labels; otherwise the sample is discarded or repeated as the plan states (IN-2 and S4). Design judgment, following RMP-PREV-004.",
        "Batch 12 protocols now record the review as AI-assisted (Medical Research Assistant, Oct 21, 2026); no named human clinician."
      ]
    }
  ]
}
