NASA Space Apps Challenge 2026 · Ar-Ramtha, Jordan Pre-event · capability prepared, solution not started

Challenge #04
Health Monitoring Software for Astronauts

Team Astrologos. We are building the layer underneath the dashboard: a validated contract in which a model cannot raise an alarm, a baseline that is the astronaut's own, a monitor that stays quiet when it does not know, and an escalation packet that survives losing the link.

EVENTSat 14 – Sun 15 Nov 2026
VENUEAr-Ramtha, Jordan
TEAMAstrologos · max 6
TIERIntermediate

01 — the problem

A monitor assumes a warning buys time to act

There is a documented case in the literature where it did not. That sentence is the whole design brief, and it cuts against the obvious build.

Alarm fatigue is a failure mode

A monitor that fires on normal spaceflight physiology trains the crew to ignore it. A war that is always on is off.

Limits fire too late

Deviation from a person's own baseline shows up earlier than a breach of a population limit. So the baseline must be personal.

The crew is an input, not noise

The archive itself records the person and the sensor disagreeing in a consistent direction. Show both.

02 — architecture

Four tiers, only one of which decides

The obvious design is: a model reads the crewmember's numbers and says how worried to be. That design fails twice — a language model is good at explaining and bad at thresholding, and an astronaut's normal is not a textbook normal.

01

Deterministic rules

Pure functions over an observation and the subject's own baseline. Auditable, diffable, unit-tested, always on with no model call at all.

owns severity
02

Local model

Takes findings and writes the sentence a tired crewmember can act on. Runs locally — there is no cloud endpoint in the contract, not even as a fallback.

owns language
03

Risk & evidence

Findings link to a named NASA HRP risk and to the evidence behind the threshold. A finding with no link is still emitted — unlinked, and it says so.

owns citation
04

Escalation packet

Hash-chained, queued while offline, still intact and tamper-evident when the link returns. The output that survives a comms blackout.

owns survivability

R6 — the rule that makes the design work

A model-proposed finding may not exceed watch. The model is allowed to be wrong about wording. It is not allowed to be wrong about urgency.

Enforced in code, not in the prompt. If the model's output can carry a severity, then a sentence in a prompt is the only thing standing between the crew and an inflated alarm — and prompts get edited under deadline pressure.

03 — the evidence

Why we can say this without guessing

Two files in the NASA Life Sciences Data Archive define the product. This is real flight and chamber data, downloaded with no key and no account.

Mir 23 / Mir 25 — a crewmember in flight against their own pre-flight baseline

Sleep measurePREIN FLIGHTPOSTFp
Sleep quality (judge score)3.362.683.445.830.03*
Total time (min)4474634751.770.23
Sleep duration (min)40130742115.980.002*
Sleep efficiency (%)89.665.888.631.050.0002*
Sleep latency (min)23.351.827.612.450.004*
REM latency (min)60.495.657.516.970.001*
Wake time (min)461565449.99<.0001*

In flight the crewmember took twice as long to fall asleep, woke up three times as long, and lost a quarter of their sleep efficiency — all at p ≤ 0.004. Source: JMMIR9401663_113.xls. PRE / IN / POST is the exact shape our product compares: PRE is the personal baseline, IN is the deviation.

LMLSTP 3.4 chamber — the sensor and the person disagree

VariableObjective baselineObjective chamberSubjective baselineSubjective chamber
Duration (h)6.62 ± 0.316.00 ± 0.246.78 ± 0.276.21 ± 0.21
% Efficiency88.50 ± 1.4488.10 ± 1.7396.40 ± 1.1695.66 ± 1.03
Latency (h)0.27 ± 0.060.20 ± 0.050.20 ± 0.050.24 ± 0.05
WASO0.90 ± 0.120.86 ± 0.15N/AN/A
QualityN/AN/A1.31 ± 0.111.08 ± 0.21
Awakenings4.65 ± 1.434.22 ± 0.597.11 ± 0.317.33 ± 0.30

The crew report ~7 awakenings where the actigraph counts 4–5, and subjective efficiency reads 96% against an objective 88%. The person and the sensor disagree, in a consistent direction. Source: JMGROUNDLMLSTP34_115.xls.

Design mandate that falls out of this

Show both. Never silently prefer one. A harness that overwrites crew perception with sensor data hides the input that says "I feel worse than my numbers."

04 — the data

What NASA will actually hand you

nlsp.nasa.gov public API. No key, no account, open CORS. Enumerated across 25 search terms.

679datasets enumerated
238machine-readable
133physiologically relevant
31.0 MBour verified corpus

The honest shape of the archive

ArtifactCountReality
.tif251usually a rendered chart, not data — needs OCR or manual digitisation
.xls (BIFF)201genuine spreadsheets — the good stuff
.pdf98reports and scans
.xlsx36straightforward
.zip5bundles

Roughly 55% of artifacts need OCR or manual digitisation before they can drive anything; only ~40% are directly ingestible. Any product that claims to "ingest the archive" without saying this is overstating. We say it.

Missions covered: Mercury · Gemini · Apollo 7–17 · Skylab · ASTP · Shuttle (STS-8 → STS-94) · Mir 17–20 · Expedition 2–13 · NEEMO 5 · LMLSTP · BRC · LSAH · ROI · Ground. Every file in our corpus carries a sha256 in data/MANIFEST.json — 238 files, 236 unique.

What the archive does not contain: anonymous continuous astronaut vital signs (heart rate, SpO₂, ECG, sleep time-series) and no live ISS life-support telemetry. These are unresolved, not proven absent.

05 — the contract

The safety rules are executable, not aspirational

Four objects, a closed vocabulary, and a validator that rejects what it should. Standard library only — it runs on a phone in Termux and on a judge's laptop with nothing installed.

20/20selftest cases correct
42registered quantities
0python dependencies
$ cd harness/schema && python3 validate.py --selftest
20 correct / 20 cases, 0 wrong
$ echo $?
0

Enforced rules

#RuleWhy
R2unit must equal the registry unit exactlybpm-vs-mmHg confusion is how a harness kills someone
R3cadence must equal the registry cadencean episodic lab value must not be read as a continuous stream
R5severity ≤ the quantity's severity_capa wrist proxy cannot make a top-severity claim
R6model-proposed findings ≤ watchexplains a severity, never raises one
R7baseline.insufficient ⇒ ≤ watcha wide band from three samples is not a deviation
R15escalate requires ≥ attentionescalation must be earned
R16urgent requires a citation and a deterministic rulea claim that serious needs a source, not a vibe
R17unresolved panel attribution may not be cited as a definitive analyte listthe i-STAT EC6+ conflict is real; do not paper over it

"I don't know" is a first-class answer

A baseline is personal_median_and_mad with n ≥ 5, or it is marked insufficient — which forces severity ≤ watch. There is no population-range option in the contract at all. "I don't have enough of your data to say" is correct, and the schema makes it cheap to give.

06 — the team

Six seats, one contract, every change reviewed

Each teammate runs their own agent against the same repository, carrying a skill for their seat. Nothing lands on main except through a reviewed pull request — and nobody merges their own.

SeatOwnsSkillAcceptance test
Leadboundary, workflow, mergescrew-health-briefevery PR reviewed, CI green
Harnessrules layer, severity, packetscrew-health-harness-contractvalidator 20/20, exit 0
Datacorpus, source ledger, harvestingnlsp-data-accessmanifest verifies, 0 failed
UI / anatomybody figure, body_regionanatomy-3d-viewerfigure renders, regions clickable
Signalswrist, camera, typed valuesbiosignal-vitalsa real reading becomes a valid observation
Explanationlocal model, HRP citationscrew-health-safety-and-claimsmodel cannot raise severity
Site / submissionlive site, SI disclosurecrew-health-site-deploylive URL 200, matches submitted build
git switch -c seat/signals-rppg-camera
git commit -m "feat(signals): ingest camera rPPG into an Observation"
gh pr create --fill --base main

07 — sources

Where every number above comes from

SourceWhat it givesAccess
NLSP / LSDA datasetshuman spaceflight research data — the corpus abovenone · CORS *
OSDR searchspaceflight biology — gene expression, proteomics, metabolomicsnone · CORS restricted
OSDR controlled accessidentifiable human-subjects data · separate approved request, not Earthdata Loginapproval
Twins Study articlethe identical-twin comparison, one in space one on Eartharticle only — underlying data needs approval
HRP Human Research Roadmapthe formal risk list (Rev T, May 2025)none
HRP evidence reportsthe sleep evidence report (83 pp, 2016)none

Traps we recorded so nobody repeats them: OSDR-343 mentions the Twins Study but is rodent metabolomics — an easy, damaging conflation. The documented /osdr/data/osd/api base returns 404; use /osdr/data/search. And a .tif in NLSP is usually a chart, not a series.

08 — status

Capability now, solution in the window

NASA's rules state that teams may not begin working on the challenges before the hackathon. So this repository holds capability — data, contract, validator, sources, skills — and deliberately no product. The distinction we operate on:

Prepared before the event

  • 238-file corpus, sha256-manifested, no key needed to refetch
  • The validated contract and its 20-case selftest
  • Which endpoints work and which 404
  • 42 registered quantities with caps and sanity bounds
  • The agent skill pack, one per seat

Built 14–15 Nov only

  • The product and its screens
  • Which readings we choose to display
  • The model's role in the product
  • The demo and the submission text
  • Any claim about what it does

The demo will run on replayed real flight data, and the product itself will say so — not just the footer. Every teammate's work is disclosed in the mandatory SI statement, written as we go rather than reconstructed at the end.

Triage aid. Not a medical device. Not a diagnosis. Escalate to a clinician for any decision.