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.
01 — the problem
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.
A monitor that fires on normal spaceflight physiology trains the crew to ignore it. A war that is always on is off.
Deviation from a person's own baseline shows up earlier than a breach of a population limit. So the baseline must be personal.
The archive itself records the person and the sensor disagreeing in a consistent direction. Show both.
02 — architecture
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.
Pure functions over an observation and the subject's own baseline. Auditable, diffable, unit-tested, always on with no model call at all.
owns severityTakes 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 languageFindings 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 citationHash-chained, queued while offline, still intact and tamper-evident when the link returns. The output that survives a comms blackout.
owns survivabilityA 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
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.
| Sleep measure | PRE | IN FLIGHT | POST | F | p |
|---|---|---|---|---|---|
| Sleep quality (judge score) | 3.36 | 2.68 | 3.44 | 5.83 | 0.03* |
| Total time (min) | 447 | 463 | 475 | 1.77 | 0.23 |
| Sleep duration (min) | 401 | 307 | 421 | 15.98 | 0.002* |
| Sleep efficiency (%) | 89.6 | 65.8 | 88.6 | 31.05 | 0.0002* |
| Sleep latency (min) | 23.3 | 51.8 | 27.6 | 12.45 | 0.004* |
| REM latency (min) | 60.4 | 95.6 | 57.5 | 16.97 | 0.001* |
| Wake time (min) | 46 | 156 | 54 | 49.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.
| Variable | Objective baseline | Objective chamber | Subjective baseline | Subjective chamber |
|---|---|---|---|---|
| Duration (h) | 6.62 ± 0.31 | 6.00 ± 0.24 | 6.78 ± 0.27 | 6.21 ± 0.21 |
| % Efficiency | 88.50 ± 1.44 | 88.10 ± 1.73 | 96.40 ± 1.16 | 95.66 ± 1.03 |
| Latency (h) | 0.27 ± 0.06 | 0.20 ± 0.05 | 0.20 ± 0.05 | 0.24 ± 0.05 |
| WASO | 0.90 ± 0.12 | 0.86 ± 0.15 | N/A | N/A |
| Quality | N/A | N/A | 1.31 ± 0.11 | 1.08 ± 0.21 |
| Awakenings | 4.65 ± 1.43 | 4.22 ± 0.59 | 7.11 ± 0.31 | 7.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.
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
nlsp.nasa.gov public API. No key, no account, open CORS. Enumerated across
25 search terms.
| Artifact | Count | Reality |
|---|---|---|
.tif | 251 | usually a rendered chart, not data — needs OCR or manual digitisation |
.xls (BIFF) | 201 | genuine spreadsheets — the good stuff |
.pdf | 98 | reports and scans |
.xlsx | 36 | straightforward |
.zip | 5 | bundles |
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
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.
$ cd harness/schema && python3 validate.py --selftest
20 correct / 20 cases, 0 wrong
$ echo $?
0
| # | Rule | Why |
|---|---|---|
| R2 | unit must equal the registry unit exactly | bpm-vs-mmHg confusion is how a harness kills someone |
| R3 | cadence must equal the registry cadence | an episodic lab value must not be read as a continuous stream |
| R5 | severity ≤ the quantity's severity_cap | a wrist proxy cannot make a top-severity claim |
| R6 | model-proposed findings ≤ watch | explains a severity, never raises one |
| R7 | baseline.insufficient ⇒ ≤ watch | a wide band from three samples is not a deviation |
| R15 | escalate requires ≥ attention | escalation must be earned |
| R16 | urgent requires a citation and a deterministic rule | a claim that serious needs a source, not a vibe |
| R17 | unresolved panel attribution may not be cited as a definitive analyte list | the i-STAT EC6+ conflict is real; do not paper over it |
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
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.
| Seat | Owns | Skill | Acceptance test |
|---|---|---|---|
| Lead | boundary, workflow, merges | crew-health-brief | every PR reviewed, CI green |
| Harness | rules layer, severity, packets | crew-health-harness-contract | validator 20/20, exit 0 |
| Data | corpus, source ledger, harvesting | nlsp-data-access | manifest verifies, 0 failed |
| UI / anatomy | body figure, body_region | anatomy-3d-viewer | figure renders, regions clickable |
| Signals | wrist, camera, typed values | biosignal-vitals | a real reading becomes a valid observation |
| Explanation | local model, HRP citations | crew-health-safety-and-claims | model cannot raise severity |
| Site / submission | live site, SI disclosure | crew-health-site-deploy | live 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
| Source | What it gives | Access |
|---|---|---|
| NLSP / LSDA datasets | human spaceflight research data — the corpus above | none · CORS * |
| OSDR search | spaceflight biology — gene expression, proteomics, metabolomics | none · CORS restricted |
| OSDR controlled access | identifiable human-subjects data · separate approved request, not Earthdata Login | approval |
| Twins Study article | the identical-twin comparison, one in space one on Earth | article only — underlying data needs approval |
| HRP Human Research Roadmap | the formal risk list (Rev T, May 2025) | none |
| HRP evidence reports | the 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
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:
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.