Journey 05 — Sessions and live what-if
Inspect prior study sessions, read sweep metadata, and call propagate() for fast what-if on a calibrated jump operator — Python-only live queries after a sweep.
Prerequisites: Journey 03 or 04 — at least one jump-calibrated session exists (or Journey 06 Robertson for trajectory-only). Scenario: Reload a calibrated operator — no new fit
Key APIs
solvjump sessions listsolvjump sessions show <session_id>session.propagate()Session.load()
Concepts to internalize
- Session persistence — sweeps are replayable artifacts; list/show without re-running the grid.
- propagate() — fast forward on the fitted operator; only valid when calibration succeeded.
- Prerequisite chain — what-if needs a prior calibrated session from 03/04/06/07.
- Ground-side only — propagate is for trade studies, not onboard deployment.
Important code
The guided tour script wraps this pattern. Copy the production shape into your pipeline:
solvjump sessions list
solvjump sessions show <session_id>
# Python what-if (requires calibrated session):
# session.propagate(params={...}, t_end=...)Act-by-act walkthrough
Act 1 — The situation
Yesterday you ran a study. In today's review someone asks: 'what if this knob moves a little?' You reload the session — no recalibration. propagate() is Python-only; the CLI is sessions list / show.
Act 2 — Inventory
solvjump sessions list — every session under ~/.solvjump/sessions.
Sessions (3)
| Field | Value | Notes |
|---|---|---|
id | 439c8ae64112... | |
tier | calibrated | |
model | brusselator_model.py:make_rhs | |
id | 74465eb894b3... | |
tier | calibrated | |
model | brusselator_model.py:make_rhs | |
id | 87957655899d... | |
tier | calibrated | |
model | brusselator_model.py:make_rhs | Using most recent calibrated session: <session_id> |
Model
| Field | Value | Notes |
|---|---|---|
model_ref | <product-root>\python\examples\brusselator_model.py:make_rhs | |
problem_id | 29c89c6449dd0461 | |
stiffness_nom | S1 | |
y0 | [1.0, 3.0] | |
t_span | [0.0, 10.0] | |
parameters | a in [0.8, 1.2], b in [2.5, 3.5] |
Routing
| Field | Value | Notes |
|---|---|---|
tier | calibrated | |
operator_id | <operator_id> | |
calibration | <session-dir>\calibration_receipt.json | |
sweep | <session-dir>\sweep_receipt.json |
Act 3 — The what-if
Four steps of 0.25 s. Each step prints safety mode (nominal / guard / anchor / srk_fallback) and a micro-verify digit count.
| Field | Value | Notes |
|---|---|---|
step | 1/4 | |
mode | nominal | |
sim_time | 0.25 s | |
state | [0.9588, 3.0465] | |
micro_verify_scd | n/a | |
step | 2/4 | |
mode | nominal | |
sim_time | 0.50 s | |
state | [0.9160, 3.1053] | |
micro_verify_scd | n/a | |
step | 3/4 | |
mode | nominal | |
sim_time | 0.75 s | |
state | [0.8757, 3.1720] | |
micro_verify_scd | n/a | |
step | 4/4 | |
mode | nominal | |
sim_time | 1.00 s | |
state | [0.8412, 3.2424] | |
micro_verify_scd | n/a |
Act 4 — Answer in the meeting
At params={'a': 1.0, 'b': 3.2}, state after 1.0 s is [np.float64(0.8411567983241416), np.float64(3.2423550195766753)]. Modes stayed in nominal/guard/anchor — operator still valid for this what-if.
Act 5 — After the meeting
Log the session id. Formal sign-off is Journey 11 golden, not propagate().
Why run SolvJump here?
-
Answer live what-if questions in a review without recalibrating — reuse yesterday's operator from a saved session.
-
Each propagate step shows safety mode and accuracy check so you can explain the answer, not just quote a number.
-
Turn a hallway question into a receipted answer in seconds instead of scheduling another overnight sweep.
Guided tour output
Verified console capture from 05_sessions_and_whatif.py:
Reload a calibrated operator — no new fit
-- Act 1 - The situation --
-> Yesterday you ran a study. In today's review someone asks: 'what if this knob moves a little?' You reload the session — no recalibration. propagate() is Python-only; the CLI is sessions list / show.
-- Act 2 - Inventory --
-> solvjump sessions list — every session under ~/.solvjump/sessions.
_section: Sessions (3)
id: 439c8ae64112...
tier: calibrated
model: brusselator_model.py:make_rhs
id: 74465eb894b3...
tier: calibrated
model: brusselator_model.py:make_rhs
id: 87957655899d...
tier: calibrated
model: brusselator_model.py:make_rhs
-> Using most recent calibrated session: <session_id>
_section: Model
model_ref: <product-root>\python\examples\brusselator_model.py:make_rhs
problem_id: 29c89c6449dd0461
stiffness_nom: S1
y0: [1.0, 3.0]
t_span: [0.0, 10.0]
parameters: a in [0.8, 1.2], b in [2.5, 3.5]
_section: Routing
tier: calibrated
operator_id: <operator_id>
calibration: <session-dir>\calibration_receipt.json
sweep: <session-dir>\sweep_receipt.json
-- Act 3 - The what-if --
-> Four steps of 0.25 s. Each step prints safety mode (nominal / guard / anchor / srk_fallback) and a micro-verify digit count.
step: 1/4
mode: nominal
sim_time: 0.25 s
state: [0.9588, 3.0465]
micro_verify_scd: n/a
step: 2/4
mode: nominal
sim_time: 0.50 s
state: [0.9160, 3.1053]
micro_verify_scd: n/a
step: 3/4
mode: nominal
sim_time: 0.75 s
state: [0.8757, 3.1720]
micro_verify_scd: n/a
step: 4/4
mode: nominal
sim_time: 1.00 s
state: [0.8412, 3.2424]
micro_verify_scd: n/a
-- Act 4 - Answer in the meeting --
-> At params={'a': 1.0, 'b': 3.2}, state after 1.0 s is [np.float64(0.8411567983241416), np.float64(3.2423550195766753)]. Modes stayed in nominal/guard/anchor — operator still valid for this what-if.
-- Act 5 - After the meeting --
-> Log the session id. Formal sign-off is Journey 11 golden, not propagate().
_section: Why run SolvJump here?
log: Answer live what-if questions in a review without recalibrating — reuse yesterday's operator from a saved session.
log: Each propagate step shows safety mode and accuracy check so you can explain the answer, not just quote a number.
log: Turn a hallway question into a receipted answer in seconds instead of scheduling another overnight sweep.Run it
cd python
# Guided tour — narrated scenario walkthrough (recommended first run):
python examples/journeys/05_sessions_and_whatif.py
# Production one-liner — same API call you ship:
solvjump sessions listWhat comes next
Journey 06 runs stiff Robertson chemistry — trajectories without ranked finalists.
Navigation
← Journey 04 — Python Session and LHS · Journey 06 — Proprietary chemistry →