{
  "$schema": "https://spacemedicinefoundation.org/robotic-medicine/protocols/schema/protocol.schema.json",
  "schema_version": "0.3",
  "version": "0.4",
  "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",
    "reviewed": "2026-10-21",
    "human_clinician_review": false,
    "text": "AI-assisted clinical and source review by the Medical Research Assistant, Oct 21, 2026 (batch 6 review, 26 required corrections and 17 optional suggestions); all required corrections, and the low-risk suggestions, are applied in this version (see Corrections). No named human clinician has reviewed it. Not for clinical use."
  },
  "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-ENV-002",
  "slug": "rmp-env-002",
  "title": "Ammonia leak: emergency equipment, crew accounting; robot inspects only when the commander sends it",
  "category": "env",
  "tier": 1,
  "rung_note": "Max rung raised from 1 to 2 for supervised fetching of breathing equipment, crew accounting and video. The robot enters a closed or contaminated module only when the commander explicitly sends it under the vehicle procedure, within hard limits, and never opens a hatch or valve on its own.",
  "result_language": {
    "use": [
      "logged, not interpreted",
      "sent to flight surgeon",
      "EMERGENCY FETCH – NOT VERIFIED (commander or CMO command)",
      "crew accounted as stated",
      "reading as displayed"
    ],
    "never": [
      "normal",
      "no problem found",
      "all clear",
      "negative",
      "any diagnosis or cause",
      "air is clear",
      "leak stopped",
      "no exposure",
      "safe to enter",
      "verified",
      "false alarm",
      "safe",
      "mild",
      "minor",
      "no smell",
      "smell gone",
      "reading is reassuring"
    ]
  },
  "scope": {
    "summary": "When an ammonia alarm sounds or ammonia is smelled, the robot sends an URGENT alert at once to the CMO, the commander and the flight surgeon, brings breathing masks and the emergency and eyewash kits on command, keeps a crew accounting list as the commander states it, records exposures as each crewmember states them, and streams video when the link allows. The vehicle ammonia procedure, led by the commander, comes first. Only if the commander explicitly sends it may the robot carry a camera or sensor into a closed module, under hard limits.",
    "why": "Spacecraft thermal systems can use ammonia, and NASA-STD-3001 Volume 2 requires that toxic releases be monitored and the crew alerted in time to act (V2 6025, which names ammonia among contaminants to monitor). On Earth, the Agency for Toxic Substances and Disease Registry (ATSDR) medical guideline describes ammonia as corrosive to eyes, skin and airways, with possible airway swelling and fluid on the lungs, injury that can keep developing for 18 to 24 hours after a severe exposure, and eye irrigation for at least 15 minutes; rescuers must be trained and protected before entering the contaminated area. A robot that can go where the crew cannot is useful, but only under the commander's control. Open question for review: the onboard mask type and fit check, the shared saturation threshold SPO2_ALERT_PCT, and how long the flight surgeon wants exposed crew watched for delayed breathing problems. Timing: the US Agency for Toxic Substances and Disease Registry (ATSDR) advises watching for upper-airway obstruction for 6 to 12 hours, and lung injury may continue to evolve over 18 to 24 hours, so the flight surgeon sets the look-back window for RF5. Ammonia causes olfactory fatigue (people stop smelling it), so the robot never says the smell is gone. The shared value SPO2_ALERT_PCT only raises an alert; it never gates a crew action (the crew act without waiting for a reading), and the clinical lead sets it per mission with the flight surgeon, because the cabin atmosphere can differ by mission. Operational context: NASA's ISS Daily Summary Report of Jan 14, 2015 describes an ammonia false alarm in which \"The crew performed emergency procedures and subsequently evacuated the US Segment and isolated themselves to the Russian Segment\", then re-entered \"wearing protective ammonia masks and tested the atmosphere as a precaution\" (the flight procedure itself is not public).",
    "covers": [
      "Ammonia alarm, smell or suspected leak, in flight",
      "Crew accounting and exposure records while the commander runs the vehicle procedure",
      "Commander-sent robot inspection of a closed module",
      "Routing to RMP-EYE-001 (eye exposure), RMP-RESP-001 (breathing), RMP-SKIN-002 (skin), RMP-ENV-005 (decontamination supplies)"
    ],
    "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)",
      "Opening or closing a hatch or valve, or isolating a module, on its own",
      "Entering a closed or contaminated module unless the commander explicitly sends it",
      "Saying the air is clear, the leak stopped or anyone was not exposed",
      "Fitting a mask on anyone"
    ],
    "related": [
      "RMP-ENV-001",
      "RMP-ENV-003",
      "RMP-EYE-001",
      "RMP-RESP-001",
      "RMP-SKIN-002",
      "RMP-PHARM-001",
      "RMP-ENV-005"
    ]
  },
  "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"
    ],
    "robot_may": [
      "Send an URGENT alert at once",
      "Bring breathing masks and the emergency and eyewash kits on command",
      "Keep the crew accounting list as stated by the commander",
      "Record exposures and symptoms as stated, with clock times",
      "Carry a camera or sensor into a closed module only when the commander explicitly sends it, within hard limits",
      "Stream video when the link allows"
    ],
    "robot_may_not": [
      "Open or close a hatch or valve, or isolate a module",
      "Enter a closed module on its own",
      "Fit a mask or touch anyone",
      "Say the air is clear or anyone is unexposed",
      "Start without a human command"
    ],
    "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": "A crewmember, the CMO or the commander started the protocol by command, or the vehicle ammonia alarm started it and a crewmember confirmed.",
      "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": "Emergency care; recording by the CMO's agreement when the crewmember cannot speak.",
    "emergency": "If the crewmember cannot agree, the robot proceeds on the CMO's or commander's command.",
    "withdrawal": "The crewmember or CMO can stop video; the alert and record stand."
  },
  "inputs": [
    {
      "id": "IN-1",
      "name": "Alarm or smell, as stated by the commander or a crewmember",
      "source": "Voice / vehicle display",
      "required": true,
      "if_missing": "Log \"no response\"; keep the URGENT alert."
    },
    {
      "id": "IN-2",
      "name": "Crew accounting: each crewmember and location, as stated by the commander",
      "source": "Commander",
      "required": true,
      "if_missing": "Log \"not accounted\" for each crewmember not stated; never assume accounted."
    },
    {
      "id": "IN-3",
      "name": "Each crewmember's stated exposure (eyes, skin, breathing) and symptoms",
      "source": "Crewmember / CMO",
      "required": false,
      "if_missing": "Log \"not stated\"."
    },
    {
      "id": "IN-4",
      "name": "Ammonia reading as displayed by the vehicle (if the vehicle shows one)",
      "source": "Vehicle display",
      "required": false,
      "if_missing": "Log \"not displayed\"; never interpreted."
    },
    {
      "id": "IN-5",
      "name": "Link status and delay",
      "source": "Communications system",
      "required": true,
      "if_missing": "Treat as link down."
    }
  ],
  "steps": [
    {
      "id": "S1",
      "actor": "robot",
      "rung": 2,
      "action": "Send an URGENT \"ammonia\" alert to the flight surgeon, the CMO and the commander at once. 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": "Alert acknowledged, or escalated.",
      "refs": [
        "V2 10174",
        "V1 6003",
        "V1 3006",
        "V2 6025"
      ]
    },
    {
      "id": "S2",
      "actor": "robot",
      "rung": 2,
      "action": "On the commander's or CMO's command, bring breathing masks and the sealed emergency kit and eyewash kit to the crew's gathering point and restrain them within reach. This is an emergency fetch on a human command (commander or CMO): no barcode check runs before hand-over and nothing waits for one. The robot reads the kit's own label and seal status only if that adds no delay, says \"EMERGENCY FETCH – NOT VERIFIED (commander or CMO command)\", and \"seal not intact\" if so, and hands the kit over anyway. The fetch is logged as an override: time, who asked, the reason as stated, kit ID and seal status. It never says \"verified\". The robot never fits a mask.",
      "success": "Equipment within reach, or skipped; override logged.",
      "limit": "<set by validation>",
      "refs": [
        "V2 7046",
        "V2 9053"
      ]
    },
    {
      "id": "S3",
      "actor": "crew",
      "action": "The commander runs the vehicle ammonia procedure (masks, moving to the clean module, isolation) and states the crew accounting; the CMO checks exposed crew.",
      "success": "Human-led response; robot logs what is stated.",
      "refs": [
        "V2 6025"
      ]
    },
    {
      "id": "S4",
      "actor": "robot",
      "rung": 2,
      "action": "Keep the crew accounting list exactly as the commander states it, marking anyone not stated as \"not accounted\"; log each stated exposure and symptom with its clock time; stream video when the link allows.",
      "success": "Accounting list and exposure log kept.",
      "refs": [
        "V1 6003"
      ]
    },
    {
      "id": "S5",
      "actor": "robot",
      "rung": 2,
      "action": "The default is not to enter; a hatch-side view is preferred. Only if the commander explicitly sends it: carry a camera or sensor into the named closed module under the vehicle procedure, within the hard limits for distance, time and battery, never opening a hatch or valve itself, and return on the commander's word or when any limit is reached. Readings are sent as displayed, never interpreted.",
      "success": "Inspection done and robot back, or not sent.",
      "limit": "<set by validation>",
      "refs": [
        "V2 10168",
        "V2 10172"
      ]
    },
    {
      "id": "S6",
      "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": "S7",
      "actor": "ground",
      "action": "The flight surgeon (or the CMO under the onboard checklist when there is no link) decides on care for exposed crew, the watch period for delayed breathing problems and any evacuation [V1 3007].",
      "success": "Decision logged.",
      "refs": [
        "V1 3007"
      ]
    },
    {
      "id": "S8",
      "actor": "robot",
      "rung": 2,
      "action": "Only after the CMO or flight surgeon has placed an order, run RMP-PHARM-001 for the ordered item (fetch, barcode match to every order field, recipient check). This protocol adds nothing to that check, never suggests an order, and never hands anything over outside RMP-PHARM-001.",
      "success": "RMP-PHARM-001 run logged with its result, or none ordered.",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "S9",
      "actor": "robot",
      "rung": 2,
      "action": "When the CMO says the event is over, run RMP-PHARM-001 reconciliation on each kit fetched: record the items the CMO or crew state were used, the remaining contents against the kit list, seal status and expiry, labelled \"inventory reconciliation after emergency use – not a check before use\". Flag the override to the flight surgeon and the pharmacy lead, and show each kit as \"opened – not restocked\" until a human restocks and reseals it.",
      "success": "Reconciliation recorded; kits shown as opened – not restocked until resealed.",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "S10",
      "actor": "robot",
      "rung": 2,
      "action": "Send the flight surgeon one package: alert times, accounting list, exposures and symptoms as stated, displayed readings, inspection video and decisions. The robot is cleaned before its next task.",
      "success": "Package delivered or queued.",
      "refs": [
        "V1 6003",
        "V1 7001",
        "V1 7003"
      ]
    }
  ],
  "decisions": [
    {
      "id": "D1",
      "after": "S4",
      "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": "S4",
      "decided_by": "robot",
      "question": "Did the commander or crewmember answer when asked for accounting or exposure?",
      "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": "S4",
      "decided_by": "crew",
      "question": "Does the commander explicitly send the robot into a closed module?",
      "branches": [
        {
          "if": "Yes",
          "then": "Run S5 within the hard limits."
        },
        {
          "if": "No",
          "then": "Skip S5; the robot stays with the crew."
        }
      ]
    },
    {
      "id": "D4",
      "after": "S7",
      "decided_by": "ground",
      "question": "What is the plan for exposed crew (care, watch period, evacuation)?",
      "branches": [
        {
          "if": "Link live",
          "then": "Flight surgeon decides; robot logs."
        },
        {
          "if": "Link down or delay too long",
          "then": "The CMO decides under the pre-approved onboard checklist; the flight surgeon reviews the log at the next contact."
        }
      ]
    },
    {
      "id": "D5",
      "after": "S8",
      "decided_by": "robot",
      "question": "What did RMP-PHARM-001 show for the ordered item?",
      "branches": [
        {
          "if": "MATCH TO ORDER",
          "then": "RMP-PHARM-001 completes its own recipient check and hand-over; this protocol only logs \"MATCH TO ORDER. Not a dose, interaction or allergy review.\" and the clock time."
        },
        {
          "if": "MISMATCH or CANNOT VERIFY on any field, or a failed scan or recipient check",
          "then": "MISMATCH or CANNOT VERIFY shown with the fields named. No hand-over under this protocol: the item stays sealed in the NOT VERIFIED bag in quarantine (the RMP-PHARM-001 default), and the robot never hands it over unprompted or to anyone but the CMO. The robot does not offer or suggest an override. Only if the CMO explicitly makes the two-step override request inside RMP-PHARM-001 can the item go to the CMO, logged there as an override with the reason and the mismatched fields, and flagged to the flight surgeon.",
          "handoff": "none"
        }
      ]
    }
  ],
  "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": "Robot pauses its own movement in its stopped position and tells the CMO and the commander. It never pauses in a hatch route or in the inspected module: during a commander-sent inspection X10 governs and the robot first returns to the point the commander named. This pauses robot movement only: crew masks, moving to the clean module, eyewash and the commander's vehicle procedure 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; the robot resumes only on the commander's confirmation. Everything is logged and sent to the flight surgeon at the next contact.",
      "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": "Any crewmember is \"not accounted\"",
      "action": "Robot repeats the URGENT alert with the name to the commander and CMO every <set by validation> seconds until accounted; it does not search on its own.",
      "level": "urgent",
      "refs": [
        "V1 3006"
      ]
    },
    {
      "id": "X10",
      "trigger": "During a commander-sent inspection: a distance, time or battery limit is reached, the commander recalls the robot, or the ground link is lost",
      "action": "Robot stops the inspection and returns by its entry route only to the point the commander named before entry, outside the crew's clean module; it never holds inside the inspected module or in a hatch route because of link loss alone. The hatch and decontamination follow the vehicle procedure: before re-entering the clean module, the robot waits at that point for the decontamination step the procedure states (for example a wipe-down and time to air out, so it does not carry ammonia in on its surfaces or by off-gassing), and enters the crew's module only when the commander says so. If it cannot move, it reports its position and waits for the commander.",
      "level": "safe-state",
      "refs": [
        "V2 10172",
        "V2 10173"
      ]
    }
  ],
  "red_flags": [
    {
      "id": "RF1",
      "sign": "Breathing difficulty, noisy breathing, hoarse voice or throat swelling",
      "threshold": "any",
      "action": "URGENT alert; see RMP-RESP-001; the CMO decides on oxygen",
      "source": "atsdrnh3"
    },
    {
      "id": "RF2",
      "sign": "Displayed saturation below the shared alert value",
      "threshold": "below <set by clinical lead> percent (shared parameter SPO2_ALERT_PCT)",
      "action": "URGENT alert; see RMP-RESP-001; the crew act without waiting for a reading",
      "source": "btso2"
    },
    {
      "id": "RF3",
      "sign": "Ammonia in the eyes, or eye pain after exposure",
      "threshold": "any",
      "action": "URGENT alert; see RMP-EYE-001 (eyewash is crew-led)",
      "source": "atsdrnh3"
    },
    {
      "id": "RF4",
      "sign": "Ammonia on skin, or skin pain after exposure",
      "threshold": "any",
      "action": "URGENT alert; see RMP-SKIN-002 (chemical burn); RMP-ENV-005 for decontamination supplies",
      "source": "atsdrnh3"
    },
    {
      "id": "RF5",
      "sign": "New cough, chest tightness, breathlessness or hoarse voice after the exposure",
      "threshold": "within <set by flight surgeon> hours of the exposure",
      "action": "URGENT alert; see RMP-RESP-001; delayed airway or lung injury is possible",
      "source": "atsdrnh3"
    },
    {
      "id": "RF6",
      "sign": "Confusion or drowsiness (design judgment)",
      "threshold": "any",
      "action": "URGENT alert; a crewmember checks in person; see RMP-RESP-001"
    },
    {
      "id": "RF7",
      "sign": "The oximeter cannot get a reading after the validated attempts (L5), and \"saturation not obtained\" is logged",
      "threshold": "any",
      "action": "URGENT alert; the CMO checks the crewmember now (possible poor circulation); the robot never says \"probe error\" and never treats a missing reading as reassuring",
      "source": "ng253"
    }
  ],
  "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": "Hatch, valve or isolation control by the robot",
      "value": "not allowed",
      "enforced": "No hatch or valve task is loaded"
    },
    {
      "id": "L3",
      "name": "Distance, time and battery limits for a commander-sent inspection",
      "value": "<set by program environmental lead with the flight surgeon>",
      "enforced": "Controller hard limits; return when any is reached"
    },
    {
      "id": "L4",
      "name": "Robot speed near the crewmember",
      "value": "<set by validation>",
      "enforced": "Hard limit in the controller",
      "refs": [
        "V2 10172"
      ]
    },
    {
      "id": "L5",
      "name": "Failed oximeter readings before \"saturation not obtained\"",
      "value": "<set by validation>",
      "enforced": "Software"
    }
  ],
  "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": "Alert time, crew accounting list as stated, each exposure and symptom as stated, displayed readings, inspection start, route and return."
    },
    {
      "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"
      ]
    },
    {
      "id": "LOG-7",
      "text": "Each emergency fetch as an override (time, who asked, reason as stated, kit ID, seal status) and the later inventory reconciliation, labelled \"not a check before use\".",
      "refs": [
        "V2 7059"
      ]
    },
    {
      "id": "LOG-8",
      "text": "Each RMP-PHARM-001 run started from this protocol: order ID, result (MATCH TO ORDER, MISMATCH or CANNOT VERIFY with the fields), quarantine, and any CMO override logged by RMP-PHARM-001 (reason and mismatched fields), at clock time. No running counter of doses.",
      "refs": [
        "V2 7059"
      ]
    }
  ],
  "requirements": [
    {
      "id": "V1 3004",
      "use": "In-mission care includes emergency kits and eye irrigation; the crew deliver care."
    },
    {
      "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 3007",
      "use": "Medical evacuation when needed; the flight surgeon decides."
    },
    {
      "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 6025",
      "use": "Contamination monitoring and alerting: toxic releases, including ammonia, are monitored and the crew alerted in time to act."
    },
    {
      "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; after an emergency fetch the robot reconciles the kit through RMP-PHARM-001 as an inventory record (never a check before use) and shows it as \"opened – not restocked\" until resealed."
    },
    {
      "id": "V2 9053",
      "use": "Protective equipment for expected hazards: breathing masks are fetched on command."
    },
    {
      "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 alarm, crewmember not accounted, eye exposure, delayed breathlessness, commander-sent inspection with lost link, CMO as patient.",
      "pass": "Zero contact; no hatch or valve action; inspection returns on every limit."
    },
    {
      "stage": "training model",
      "what": "Ammonia drill with the robot fetching masks and keeping the accounting list.",
      "pass": "Masks at the gathering point within <set by validation> seconds."
    },
    {
      "stage": "parabolic or station demonstration",
      "what": "Mask fetch and module-entry route under commander control, without a leak.",
      "pass": "Every limit stops and returns the robot."
    },
    {
      "stage": "flight use under flight surgeon supervision",
      "what": "First use in drills.",
      "pass": "No safety events."
    }
  ],
  "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 the commander, the CMO or a crewmember. The commander leads the vehicle procedure."
  },
  "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: the flight surgeon receives the alert, records and video when the link allows.",
    "loss_of_signal": [
      "Only the robot pauses its own movement and tells the CMO and the commander; recording continues offline on confirmation.",
      "Crew masks, moving to the clean module, eyewash and the commander's vehicle procedure continue under the onboard checklist and never wait for the link or the robot."
    ],
    "mars_delay": [
      "The ammonia response cannot wait for the ground; the onboard checklist and two trained CMOs lead."
    ]
  },
  "sources": [
    {
      "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": "btso2",
      "text": "British Thoracic Society. Guideline for oxygen use in healthcare and emergency settings (emergency oxygen guideline page). Fetched Oct 21, 2026.",
      "url": "https://www.brit-thoracic.org.uk/quality-improvement/guidelines/emergency-oxygen/",
      "supports": "Recommended target saturation range for acutely ill patients not at risk of hypercapnic respiratory failure is 94-98%; for known COPD or other risk factors for hypercapnic respiratory failure, 88-92% pending blood gas results. Context for the CMO and flight surgeon only; the robot never starts, stops or adjusts oxygen."
    },
    {
      "key": "ng253",
      "text": "National Institute for Health and Care Excellence. Suspected sepsis in people aged 16 or over: recognition, assessment and early management. NICE guideline NG253 (2025, last updated Sept 23, 2026).",
      "url": "https://www.nice.org.uk/guidance/ng253/chapter/Face-to-face-assessment",
      "supports": "People with sepsis may feel very unwell and may not have a high temperature; do not rely on fever alone; a rise in temperature can be a physiological response; assess temperature, heart rate, breathing rate, blood pressure, level of consciousness and oxygen saturation; look for mottled or ashen skin, blue skin, lips or tongue, a non-blanching rash, and breaks in the skin; ask how often the person passed urine in the past 18 hours and about fever or shaking chills (rigors); pay attention to new changes in behavior and to concerns raised by others."
    },
    {
      "key": "issds2015",
      "text": "NASA. ISS Daily Summary Report 01/14/15 (2015).",
      "url": "https://www.nasa.gov/blogs/stationreport/2015/01/14/iss-daily-summary-report-01-14-15/",
      "supports": "Ammonia leak false alarm on the ISS: \"The crew performed emergency procedures and subsequently evacuated the US Segment and isolated themselves to the Russian Segment\"; later \"the Crew ingressed the US Segment wearing protective ammonia masks and tested the atmosphere as a precaution.\" Operational context only; the flight procedure itself is not public. URL confirmed live (HTTP 200), Oct 21, 2026."
    },
    {
      "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 6025 (contamination monitoring and alerting; ammonia named among contaminants to monitor), V2 9053 (protective equipment), and Section 10.6 automated and robotic systems."
    },
    {
      "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 3004, V1 3006, V1 3007."
    },
    {
      "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": "AI-assisted clinical and source review by the Medical Research Assistant, Oct 21, 2026 (batch 6 review)",
      "items": [
        "RF4 (skin): routes to RMP-SKIN-002 (chemical burn), with RMP-ENV-005 (planned) for decontamination supplies; RMP-ENV-005 is marked planned in covers and removed from related; RMP-SKIN-002 added to related (item 13).",
        "X10 (inspection limit, recall or link loss): the robot returns only to the point the commander named before entry, outside the clean module, never holds inside the inspected module on link loss alone, waits for the vehicle procedure's decontamination (wipe-down and off-gassing) before re-entering the clean module, and enters only when the commander says so. X5 says X10 governs during an inspection. S5 says the default is not to enter; a hatch-side view is preferred (item 14; design judgment).",
        "RF5: new cough, chest tightness, breathlessness or hoarse voice within <set by flight surgeon> hours of the exposure (ATSDR context: 6-12 hours for upper-airway obstruction, lung injury evolving over 18-24 hours) (item 15).",
        "RF6 (confusion or drowsiness) labelled design judgment, adds \"see RMP-RESP-001\" (item 16).",
        "X5 and the comms loss-of-signal branch: only the robot pauses, never in a hatch route or contaminated module; masks, moving to the clean module, eyewash and the commander's procedure never wait for the link or the robot; the robot resumes on the commander's confirmation (item 24).",
        "RF2 says the crew act without waiting for a reading; new URGENT RF7 and limit L5 for \"saturation not obtained\" (item 25).",
        "Never-words \"no smell\" and \"smell gone\" (olfactory fatigue, ATSDR) (suggestion 36).",
        "Batch 6 protocols now record the review as AI-assisted (Medical Research Assistant, Oct 21, 2026); no named human clinician.",
        "Citation labels changed to the site's year-only convention: \"(approved for public release <date>)\" now reads \"(YYYY)\", and NASA-STD-3001 Volume 2 \"Revision F (approved July 14, 2026)\" now reads \"(Rev F, 2026)\" (sources: v2). Editorial; no change to steps, thresholds or limits."
      ]
    },
    {
      "date": "2026-10-21",
      "version": "0.3",
      "source": "Batch 7 review and batch 8 editorial (AI-assisted), Oct 21, 2026",
      "items": [
        "Why cites NASA ISS Daily Summary Report 01/14/15 (ammonia false alarm: crew evacuated the US Segment, re-entered wearing ammonia masks and tested the atmosphere) as operational context; URL confirmed live, https://www.nasa.gov/blogs/stationreport/2015/01/14/iss-daily-summary-report-01-14-15/ (batch 7 review suggestion 30; batch 6 suggestion 35).",
        "Cross-links to the batch 8 drafts no longer say \"(planned)\" now that those protocols exist as v0.1 drafts.",
        "RMP-ENV-005 added back to related now that it exists as a v0.1 draft (its routing matches RF3 to RMP-EYE-001 and RF4 to RMP-SKIN-002)."
      ]
    },
    {
      "date": "2026-10-21",
      "version": "0.4",
      "source": "Batch 13 editorial (AI-assisted), Oct 21, 2026",
      "items": [
        "Cross-links no longer say \"planned\" now that every protocol in the library exists as a draft (wording only)."
      ]
    }
  ]
}
