Open the whole manual on one page

3. NAVIGATOR: where the evidence is

The right-hand column, Take me there, regimes and no route found.

The three kinds of change: move, leave open, different regime

A route is made of changes, and there are only three kinds.

Move. A number you set (oxygen, pressure, flow, thickness...) goes to the nearest condition that was actually tested in that investigation. For oxygen and pressure together, "nearest" means the nearest point of the region covered by the investigation's tests, not the nearest oxygen value and the nearest pressure value separately. The route tells you the exact new values and shows the records that define that edge, so you can check them.

Leave open. Some axes of your question can be left unstated: the fuel phase (solid, liquid or gas), the diluent gas and the flame type. If an investigation did not record one of them, comparing at "any value" is honest, and the route says so: "Leave fuel phase open: PSI-25 did not record it." This is the only kind of "leave open" allowed.

Different regime. A regime axis you set differs from every condition the investigation was tested in: for example you set partial gravity and the investigation was run only in microgravity. The route says "Switch ... This is another regime, not a small step." A route that contains any regime switch is called a different-regime route, whatever else it also contains, and it is always ranked after every route that does not need one.

A route can combine kinds: "Leave fuel phase open ... Move pressure from 70.3 kPa to 101 kPa ...". If it contains a regime switch it is a different-regime route; otherwise, if it mixes kinds, it is a combined route.

Moves smaller than the measurement tolerance (0.5 %) are not listed, because the verdict already treats them as the same condition.

## For engineers

Types: RouteChangeKind = 'move' | 'leave_open' | 'switch_regime'; RouteKind = 'move' | 'leave_open' | 'combined' | 'different_regime' (engine/src/navigator.ts). Kind rule: any switch_regime change gives different_regime; otherwise more than one change kind gives combined; otherwise the single kind.

planCluster (navigator.ts:120) builds changes in this order:

1. Regime axes, in REGIME_AXES order (gravity_regime, fuel_phase, diluent, flame_type), for each axis the target states:
- cluster state missing or conflicting: leave_open (never for gravity_regime, see the next topic);

- cluster state known and different: switch_regime to the cluster's value;

- the special case of informational.gravity_not_covered (a gravity above 1.1 g) is a switch of the gravity regime to the cluster's value, and gravity_not_covered is then removed from the route target.

2. Continuous axes: a stated axis that no test of the cluster records, or that is not recorded together with the other stated axes, makes the cluster unreachable (no leave_open).

3. Moves. If both o2_mole_fraction and pressure are stated, the points of the complete tests are normalized by the axis scales, the hull is built (convexHull, engine/src/geometry.ts:25) and, if the target is neither inside nor within the tolerance box (hullNearBox, geometry.ts:88), the nearest point of the hull is taken (nearestPointOnHull, geometry.ts:135). New values are rounded to 10 significant digits (sig10). Every other stated axis is clamped to [min, max] of the complete tests when it is outside by more than 0.5 % of its own value.

4. A move whose |to - from| is at most MEASUREMENT_TOLERANCE_REL × |from| (0.005, engine/src/types.ts:175) is applied to the target but not listed as a change.

5. Changes are ordered leave-open, move, switch for the sentence. distance is the Euclidean norm of the normalized displacement of the moved axes.

After a gravity switch to a regime other than partial_gravity, informational.gravity_level is removed from the route target, so a stale "0.16 g" cannot survive a switch to microgravity.

Moved values carry citations: for plane moves the records at the hull vertices that bound the nearest edge (recordsAt), for clamped axes the records at the bound.

Sources: engine/src/navigator.ts

Why gravity, oxygen and pressure are never left open

It would be easy to produce more routes by quietly dropping parts of your question: "leave gravity open and this investigation is comparable". PYRION does not do that, on purpose.

Gravity. If an investigation's records do not state its gravity regime, PYRION cannot compare it with your gravity. Leaving your gravity "open" would mean comparing a lunar cabin with an experiment whose gravity nobody stated, and calling the result applicable. That would treat "unknown" as if it were "the same". So such an investigation is listed as unreachable, with the reason: "the extracted records do not state its gravity regime, so it cannot be compared on gravity." Whether the records of an investigation do state its gravity is a question for the extraction of the data, not something NAVIGATOR may fill in.

Oxygen, pressure and any other number you set. These are the heart of your question. If an investigation did not record pressure, it cannot be compared at your pressure, and NAVIGATOR says exactly that: "PSI-22 did not record pressure, so it cannot be compared at your pressure." It does not offer "leave pressure open" as a way to make it comparable. The same holds when oxygen and pressure were recorded, but never together in one test.

What may be left open. Only the regime axes that are about what is burning and in what gas: fuel phase, diluent and flame type. If you did not state them, they are not compared at all; if you did and the investigation did not record them, NAVIGATOR may suggest leaving them open, in words.

The rule is about honesty, not convenience: a route is a promise that the change makes the comparison fair.

## For engineers

Where it is enforced (engine/src/navigator.ts, planCluster):

  • gravity_regime with cluster state missing: route: null, why: 'the extracted records do not state its gravity regime, so it cannot be compared on gravity'; with state conflicting: 'the extracted records disagree on its gravity regime (...), so it cannot be compared on gravity'.
  • A stated continuous axis that no test records: why: '${acc} did not record ${axisLabel}, so it cannot be compared at your ${axisLabel}.'
  • Stated axes never recorded in one test: why: 'No single test of ${acc} records ${labels} together, so it cannot be compared at the values you set.'

The blockers of evaluate() follow the same rule: AXIS_NOT_RECORDED on a continuous axis, and any blocker on gravity_regime, carry no action (engine/src/verdict.ts:100, blockersOf); only fuel phase, diluent and flame type get "Leave ... open."

Invariants in engine/test/navigator.test.ts ("routes never drop an axis the target states" and the main invariant): no route has a leave_open change on gravity_regime or on a member of CONTINUOUS_AXES; every route target keeps every stated continuous axis (except gravity_level, which is informational); after a gravity switch to microgravity or normal gravity there is no informational.gravity_level.

Sources: engine/src/navigator.ts; engine/test/navigator.test.ts

How routes are ranked

Routes are shown in an order that never rewards a regime switch:

  1. First come the routes that need no regime switch (move, leave open, or both). Among them, the route with the fewest changes comes first.
  2. If two routes have the same number of changes, the one that moves your condition least comes first. "Least" is measured on a scale that makes oxygen and pressure comparable: each axis is divided by the range of that axis across all of PSI.
  3. If they are still tied, the investigation with the smaller PSI number comes first (so the order never depends on how the records happen to be stored).
  4. Only after all of those come the different-regime routes, sorted by the same three rules. A different-regime route with zero distance still comes after a no-switch route that moves a long way, because a regime change is not a distance: it is a different situation.

Each investigation gets at most one route (its best). When an investigation has several clusters (several regime combinations), the best cluster's route is the one shown.

## For engineers

compareRoutes (engine/src/navigator.ts:313): tier (different_regime = 1, otherwise 0), then changeCount, then distance, then compareAccession (numeric order of the PSI number), then clusterKey (string order). One route per investigation: the cluster routes of an investigation are sorted with the same comparator and the first is kept; testedRegimes (all regime combinations the investigation was tested in) is attached to a different-regime route.

distance is the square root of the sum over moved axes of ((to - from) / scale)^2, with scale the AxisScale.scale of the corpus normalization (engine/src/evidence.ts, buildCorpus): the global range of counted values, or the absolute value when the range is 0, or 1.

threePartAnswer (engine/src/answer.ts:87) shows at most the first 3 routes.

Invariant (navigator.test.ts, checkInvariant): all different-regime routes come after all others; among routes of the same tier, order is by changeCount then distance.

Sources: engine/src/navigator.ts

Routes that cannot be built, and why

Some investigations get no route. They are listed, each with a plain sentence, so a missing route is never a mystery. The reasons are:

  • No gravity regime stated. "The extracted records do not state its gravity regime, so it cannot be compared on gravity." (Or, if records disagree: "...disagree on its gravity regime ...".)
  • Gravity above what PSI covers. If you set more than 1.1 g, no investigation covers it. A route can switch the regime for investigations that state one; for an investigation that does not state its gravity regime the sentence is: "PSI-xx does not record the gravity regime, and the gravity you gave is above everything this dataset covers."
  • An axis you set was not recorded. "PSI-22 did not record pressure, so it cannot be compared at your pressure."
  • Axes recorded, but never together. "No single test of PSI-xx records oxygen and pressure together, so it cannot be compared at the values you set."
  • Values listed without pairing. "PSI-68 lists several oxygen and pressure values without saying which go together, so no tested point can be named."
  • No change of the offered kinds works. "PSI-xx: no change of the kinds this tool offers makes it comparable (the engine's answer is: ...)." This is a safety net; the tests do not reach it.
  • Nothing to change. "no change of the kinds this tool offers is needed or possible."

In the app, these appear under the routes, with the action button missing where the sentence says the investigation cannot be compared.

## For engineers

Every string is produced in planCluster (engine/src/navigator.ts:120) as ClusterPlan.why; routesToEvidence stores the first available why of the investigation's clusters in RouteSet.unreachable[{accession, reason}] (sorted by compareAccession).

| Code path | Reason |
|---|---|

| gravity_regime state missing | the extracted records do not state its gravity regime, so it cannot be compared on gravity |

| gravity_regime state conflicting | the extracted records disagree on its gravity regime (...), so it cannot be compared on gravity |

| informational.gravity_not_covered and cluster gravity not known | ${acc} does not record the gravity regime, and the gravity you gave is above everything this dataset covers. |

| stated axis with no recorded value in any test | ${acc} did not record ${axis}, so it cannot be compared at your ${axis}. |

| no test complete for all stated axes | No single test of ${acc} records ${axes} together, so it cannot be compared at the values you set. |

| O2 and pressure both stated, no pairable point (testPoints returns null for every test) | ${acc} lists several oxygen and pressure values without saying which go together, so no tested point can be named. |

| verification judgeCluster is not APPLICABLE | ${acc}: no change of the kinds this tool offers makes it comparable (the engine's answer is: <verdict label>). |

| changes.length === 0 | ${acc}: no change of the kinds this tool offers is needed or possible. |

testPoints (engine/src/evidence.ts:270) returns the measured points of a test on the given axes; it returns null when two or more of the axes have more than one value, because which value goes with which is then unknown.

Sources: engine/src/navigator.ts

\"Take me there\"

"Take me there" is the button on a route. It moves your condition to the condition the route describes, and the verdict is recalculated on the spot.

What happens when you click it:

  1. The app replaces your target with the route's resulting target (the new oxygen and pressure, the opened axes, the switched regime).
  2. The engine evaluates it again, exactly as for any other condition. If the route was built correctly, the investigation is now Applicable; if not, you would see it, because the verdict is never taken from the route.
  3. Applying a route leaves the preset you started from: your condition is now a custom one.

For a different-regime route the button says "Switch to ..." and not "Move": it is a different situation, not a small step, and the app does not hide that.

The button is a convenience. Everything it does you could do yourself with the sliders and the regime selectors; the route only tells you which values to use and why.

## For engineers

The route's target (Route.target, engine/src/navigator.ts) is the canonical target after all changes: { regime, continuous, informational? }. It is verified before being returned: judgeCluster(cluster, finalTarget, scales).verdict === 'APPLICABLE' (otherwise the investigation is unreachable). Test: navigator.test.ts checkInvariant applies every route's target with evaluate() and asserts APPLICABLE for the route's accession.

The app uses route.target directly; it must not edit it. For gravity, informational.gravity_level is dropped when the route switches the regime to anything but partial gravity (so a stale lunar level cannot remain in a microgravity target) and informational.gravity_not_covered is removed after a switch.

A target given to routesToEvidence with continuous.gravity_level is normalized to informational.gravity_level and RouteSet.notes[0] says "The gravity level is shown, not compared: no condition record carries it, so it is not an axis a route can move or leave open."

Sources: engine/src/navigator.ts; web/content/help/take-me-there.md

Ground tests note

What it is. A sentence under the headline when gravity is normal (1 g).

What it shows. That PSI holds no 1 g tests with oxygen and pressure per test; the only stated ground conditions are BASS-II and BRE.

How to use it. Click its link for the inventory.

Example. Choose normal gravity and read it.

What it does not do. It is specific to PSI's extracted records.

Pin to compare

What it is. A button on the verdict panel.

What it shows. It keeps a ghost marker of your current condition on the chart.

How to use it. Click it, then move the target to compare.

Example. Pin the ISS, then try the Moon.

What it does not do. The pinned condition is only a view aid.

Clear pinned condition

What it is. A link next to a pinned comparison.

What it shows. Removes the ghost marker.

How to use it. Click it.

Example. Clear after comparing.

What it does not do. It does not change your condition.

Where the evidence is

What it is. The second card of the right column.

What it shows. Groups: Already comparable, How to reach more evidence, Tested only in another regime, No route found.

How to use it. Scroll it; it has its own scrollbar.

Example. Find the closest route.

What it does not do. It lists investigations of the 24 that have extracted values.

Route group heading

What it is. The uppercase heading of each group.

What it shows. The group name and its count.

How to use it. Read it to know what the items below mean.

Example. "No route found (8)".

What it does not do. Counts include only investigations with extracted values.

Comparable investigation name

What it is. The bold name in "Already comparable".

What it shows. The accession and acronym.

How to use it. Click it to open the investigation's card.

Example. Open PSI-69.

What it does not do. Comparable means applicable here, not recommended.

Comparable DOI link

What it is. A small doi link.

What it shows. The investigation's DOI at doi.org.

How to use it. Click it to open the dataset page.

Example. Open the DOI.

What it does not do. It points at NASA's dataset, not at our extraction.

Route investigation name

What it is. The name at the start of a route line.

What it shows. The accession and acronym of an investigation that could become comparable.

How to use it. Click it to open its card.

Example. Open PSI-26.

What it does not do. It does not apply the route.

Route DOI link

What it is. A small doi link on a route line.

What it shows. The dataset's DOI.

How to use it. Click it.

Example. Check the dataset.

What it does not do. It does not apply the route.

Route level chip

What it is. A small outlined label on a route line.

What it shows. "just outside", "outside", "far outside", "untested combination", "Insufficient" or "Other regime".

How to use it. Hover it for the full phrase.

Example. Read it before clicking Take me there.

What it does not do. A distance, not a pass: even "just outside" is an extrapolation.

Route sentence

What it is. The two-line text of a route.

What it shows. What to change: for example "Move oxygen from 21 % to 21.5 %, the nearest condition tested in PSI-26".

How to use it. Hover for the full text.

Example. Read the change before applying it.

What it does not do. It is the smallest change by the engine's rule, not the best experiment.

+ n more

What it is. A link under a route group.

What it shows. The number of remaining items.

How to use it. Click to show them; click again to fold.

Example. Expand "How to reach more evidence".

What it does not do. It only shows more of the same list.

No route found item

What it is. An investigation in the last group.

What it shows. Why the engine found no change that makes it comparable, for example it records one axis only.

How to use it. Click it to open its card.

Example. Read the reason for PSI-39.

What it does not do. It does not mean the investigation is useless; it means no change of your condition fixes the gap.

Help center

Every page, button and number explained. Loading the topics… Press the ? menu, then Help mode, to point at anything.

Pick a topic on the left, or search.