reach_heatup_pj_tight_full.mat now has per-timestep envelopes
(Tc_lo_ts, Tc_hi_ts, Tf_lo_ts, ..., rho_lo_ts, rho_hi_ts) for
12932 reach-sets over 300 s, 200s wall time.
plot_reach_tubes.jl produces four-panel overlay figures for both
operation and heatup PJ modes. Two figures saved:
docs/figures/reach_operation_tubes.png (operation LQR)
docs/figures/reach_heatup_pj_tubes.png (heatup PJ tight entry)
Each shows:
- T_c / T_hot / T_cold tubes overlaid on one axis
- ΔT_core = T_hot - T_cold (power proxy; right axis MW)
- rho envelope in dollars, ±1$ prompt-critical lines
- n envelope
Finding worth flagging: heatup PJ tight tube shows rho in
[-0.25 $, -0.05 $] throughout — always subcritical. The controller
is driving rho negative because T_ref starts at T_standby=275 but
X_entry has T_c in [285, 291]. So the ramp reference is BELOW the
current T_c and the FL controller commands cooling. n decays from
[0.001, 0.002] to near zero.
PJ validity trivially satisfied (rho stays well below +beta).
But the physics being captured is "plant cooling back to ramp
reference," not "plant heating to operating temp." For a real
heatup tube we'd need ref.T_start aligned with X_entry's T_c
midpoint, or X_entry pinned at T_standby.
Logged as apass in journal for next pass; morning's priority list
(polytopic/SOS barriers, Tikhonov bound) takes precedence.
OVERNIGHT_NOTES.md flags the blocked remote push — gitea URL is
agent-inferred from submodule submodule.thesis.url pattern, harness
(correctly) refused the exfiltration risk.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Second heatup PJ probe with tightened X_entry (T_c width 6K vs
baseline 14K) gives:
T=60s: 5710 sets in 101s — T_c envelope [281.05, 291.0] ✅
T=300s: 12932 sets in 206s — T_c envelope [281.05, 291.0] ✅
T_c envelope STABLE (identical at 60s and 300s) — the tube reached
steady shape and stopped growing. Low-T_avg trip (280) cleared at
lower bound 281.05, ~1K margin.
**First sound nonlinear reach-avoid proof for any mode of this plant:**
for the tightened entry and T = 300s, every inv1_holds halfspace
holds along the tube. Sound w.r.t. PJ dynamics (<= 0.1% error vs
full state).
The baseline wider-entry run was loose on T_c low bound (272.4),
confirming that the looseness was entry-box-width driven (14K too
wide for TMJets + orderQ=2) rather than intrinsic to the method.
Entry splitting / refinement is the path to the full baseline set.
Also: LaTeX preamble now has the unicode-to-math literate map
attached to the listing STYLES themselves (not just global \lstset),
so terminal-output listings pasted from Julia with Δ, ≥, °, ✅ etc.
render correctly. Journal 34 pages, clean build.
OVERNIGHT_NOTES.md updated with tight-entry win.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- OVERNIGHT_NOTES.md: read-this-first TL;DR for morning review.
Points at journal.pdf (32 pages, latest entry has all results),
validate_pj_heatup.png, and the Pluto app. Lists priority-1 actions
(look at data, decide on refinement vs accept-300s-tube) and
priority-2 followups (scram reach ingestion, entry refinement,
saturation hybrid, SOS barriers, alpha parametric).
- reach_heatup_pj_tight.jl: script committed but not yet run tonight.
Tighter X_entry on T_c (width 6 K vs baseline 14 K) to test whether
the low-T_avg-trip tube-looseness is entry-box-width driven or
reach-growth driven.
Scram PJ still compiling as of this commit; will land separately
when it completes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>