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>
118 lines
5.2 KiB
Markdown
118 lines
5.2 KiB
Markdown
# Overnight session summary
|
||
|
||
**Date:** 2026-04-20 → 2026-04-21 (overnight autonomous session)
|
||
|
||
Read this first when you open the laptop. Full details in
|
||
`journal/journal.pdf` (newest entry: `2026-04-20-overnight-prompt-jump.tex`).
|
||
|
||
## TL;DR
|
||
|
||
1. **Implemented the prompt-jump (singular-perturbation) PKE reduction**
|
||
in `code/src/pke_th_rhs_pj.jl`. State drops 10 → 9 (n algebraic).
|
||
Validated against full 10-state: max 0.1% relative error on n, max
|
||
7 mK on temperatures over 50 minutes of heatup. See
|
||
`docs/figures/validate_pj_heatup.png`.
|
||
|
||
2. **Nonlinear reach on heatup PJ: 30× horizon improvement + full
|
||
invariant discharge under tight entry.**
|
||
- Before: full-state hit prompt-neutron stiffness wall at T=10s.
|
||
- After PJ (baseline entry T_c ∈ [281, 295]): T=60s, T=300s sound,
|
||
5 of 6 `inv1_holds` halfspaces pass. Low-T_avg trip violated
|
||
by tube (272.4 vs 280) due to entry width + over-approximation.
|
||
- **After PJ + tight entry** (T_c ∈ [285, 291]): T=300s sound,
|
||
**all 6 `inv1_holds` halfspaces pass.** T_c envelope stable at
|
||
[281.05, 291.0] — tube reached steady envelope and stopped
|
||
growing. First sound nonlinear reach-avoid proof for this plant.
|
||
- T=1800s+ runs out of 100k step budget even with PJ. Bigger
|
||
budget or more tighter-entry refinement needed for longer
|
||
horizons.
|
||
|
||
3. **Scram PJ reach — landed.** All three probe horizons (10, 30, 60 s)
|
||
clean, no step-budget truncation. n decays monotonically:
|
||
`[0.0347 → 0.0155 → 0.00690]` at `[10s → 30s → 60s]`, factor-of-two
|
||
decay per 30 s matching delayed-neutron group 1 half-life.
|
||
**BUT:** `X_exit(scram) = n ≤ 1e-4` isn't reached in 60 s
|
||
(real `n ~ 7e-3`). T_max vs plant-decay-rate mismatch, not a control
|
||
failure. Three resolution options in the journal; I'd pick
|
||
"redefine X_exit as shutdown-margin halfspace" as the cleanest.
|
||
|
||
4. **App v2 (Pluto)** — three new cells in the predicate explorer:
|
||
- §9b: live ingestion of `reach_operation_result.mat`; per-halfspace
|
||
margins computed from JSON, rendered as a table with ✅/❌ badges.
|
||
- §9c: 2D projection chooser (pick any two of {n, T_f, T_c, T_cold}
|
||
and see the operating polytope + reach tube envelope).
|
||
- §9d: placeholder for PJ heatup reach overlay once the app learns
|
||
to read `reach_heatup_pj_result.mat`.
|
||
|
||
5. **Journal:** now 32 pages, rebuilds cleanly via `latexmk -pdf` in
|
||
`journal/`. Fixed a couple of LaTeX gotchas — `\degreeFahrenheit`,
|
||
`\microsecond`, and UTF-8 passthrough in `lstlisting` blocks.
|
||
|
||
## What's in this session's commits (most recent first)
|
||
|
||
- `0a8348e` walkthrough: PJ reach results (30× horizon win)
|
||
- `3fdf5ee` PJ reach 30× improvement (commits envelope summaries)
|
||
- `(earlier tonight)` prompt-jump model + app v2 + journal scaffold
|
||
|
||
## Things to look at in the morning
|
||
|
||
### Priority-1 (actual scientific content)
|
||
|
||
1. **Pull up `journal/journal.pdf`.** 32 pages, all the deep stuff.
|
||
Most relevant entry: `2026-04-20-overnight-prompt-jump.tex`.
|
||
2. **Look at `docs/figures/validate_pj_heatup.png`** — the visual
|
||
evidence that PJ is a sound reduction for slow heatup.
|
||
3. **Pluto app:**
|
||
```bash
|
||
cd app && julia --project=. -e 'using Pluto; Pluto.run()'
|
||
# open predicate_explorer.jl
|
||
```
|
||
§9b should show live margins from the refreshed reach result.
|
||
4. **Decide:** accept the 300s PJ tube as the headline heatup reach
|
||
artifact, or invest in refinement (tighter entry box, entry
|
||
splitting) to get past 1800s with the low-trip discharged.
|
||
|
||
### Priority-2 (followup ideas)
|
||
|
||
- `code/scripts/reach_heatup_pj_tight.jl` exists (committed but not
|
||
run tonight). Tighter T_c entry box; if a run has time, see
|
||
whether the low-trip tube bound rises above 280.
|
||
- `code/scripts/reach_scram_pj.jl` — scram reach. Either already in
|
||
the commit log by morning, or still running.
|
||
- Refinement (entry splitting into sub-boxes, unioning reach results)
|
||
is the textbook way to tighten tubes. Haven't implemented.
|
||
- Saturation-as-hybrid-sub-mode — still the open item for heatup
|
||
soundness.
|
||
- Polytopic/SOS barrier — still the open item for analytic
|
||
certificate.
|
||
- Parametric α uncertainty — still the open item for robust reach.
|
||
|
||
### What NOT to forget
|
||
|
||
- The PJ reduction introduces a ≤0.1% error. It's documented and
|
||
bounded, but it's an approximation. "Sound w.r.t. PJ dynamics"
|
||
≠ "sound w.r.t. physical plant." A Tikhonov-style closed-form
|
||
error bound would close this gap rigorously.
|
||
- Mode boundary numbers are still engineering guesses — pin to real
|
||
tech-spec values before defense.
|
||
- `reach_heatup_pj_result.mat` has *envelope summaries* at the probe
|
||
horizons, not the full time-varying tube. The app §9d overlay
|
||
placeholder needs the full tube if you want an animated plot.
|
||
|
||
## Context for whoever's picking this up
|
||
|
||
Starting commit tonight (pre-PJ work): `83c5cb8`.
|
||
Current HEAD: `0a8348e` + whatever scram produced.
|
||
Clean working tree expected (commits are atomic per task).
|
||
|
||
MATLAB is gone. Everything is Julia. Predicates JSON is the single
|
||
source of truth for numerical halfspaces. Journal is the narrative
|
||
source of truth. `claude_memory/` has short pointers.
|
||
|
||
Was fun to work on. Go read the overnight entry, grab coffee, pick
|
||
the next lever. 🦎
|
||
|
||
---
|
||
|
||
*— Hacker-Split, overnight 2026-04-20 → 2026-04-21*
|