diff --git a/code/src/pke_params.jl b/code/src/pke_params.jl index a1db046..f5baad0 100644 --- a/code/src/pke_params.jl +++ b/code/src/pke_params.jl @@ -2,11 +2,20 @@ pke_params() Return a NamedTuple with all plant parameters and derived steady-state -conditions for the PKE + thermal-hydraulics model. See -../plant-model/pke_params.m for physical rationale on each value. +conditions for the PKE + thermal-hydraulics model. -Kept as a NamedTuple rather than a mutable struct so that reachability -tools (`@taylorize` in ReachabilityAnalysis.jl) can inline the constants. +Single free parameter: `T_cold0` (full-power cold-leg temperature). +Everything else is derived from energy balance at full power. A +hidden constraint underneath every other number — looks ordinary on +the surface but is something else underneath. + +See ../../journal/entries/2026-04-17-controllers-linear-reach.tex +§ Plant-model recap for the full derivation. The MATLAB original's +inline source citations (Duderstadt, Keepin, Todreas, MATPRO, IAPWS) +are preserved in git history pre-2026-04-20 evening. + +Kept as a NamedTuple rather than a struct so reach tools (`@taylorize`) +can see through to the constants — see code/CLAUDE.md. """ function pke_params() # --- Neutronics --- diff --git a/journal/README.md b/journal/README.md index 2f67a2f..2c40939 100644 --- a/journal/README.md +++ b/journal/README.md @@ -1,5 +1,20 @@ # Lab Journal +``` + ___ + ,' `. + / ___ \ n, C_i, + | ( UO2 ) | T_f, T_c, T_cold + \ ‾‾‾ / | + `.___,' v + ||||| →→→→ [ controller ] →→→→ rods + ||||| + ‾‾‾‾‾‾‾‾‾‾‾‾‾ primary loop + ___________ + | SG | Q_sg(t) ∈ [Q_min, Q_max] + |____________| +``` + The HAHACS invention log for the `pwr-hybrid-3-demo` preliminary example. Each dated session gets an entry. The goal: a reader in 2030 should be able to rebuild the thesis work from this journal alone. diff --git a/journal/entries/2026-04-20-evening-mega-session.tex b/journal/entries/2026-04-20-evening-mega-session.tex new file mode 100644 index 0000000..bc2cac4 --- /dev/null +++ b/journal/entries/2026-04-20-evening-mega-session.tex @@ -0,0 +1,150 @@ +% --------------------------------------------------------------------------- +% 2026-04-20 evening — Lab journal scaffold, full Julia migration, app v1 +% Live / B-style narrative entry. A-pass markers throughout. +% --------------------------------------------------------------------------- + +\session{2026-04-20 (evening)}{$\sim$3 hr mega-session, autonomous}{Stand +up the lab journal as a permanent invention log, port the entire MATLAB +toolchain to Julia and delete the originals, build a Pluto.jl predicate +explorer as the FRET-adjacent UI v1. All in one go in auto mode.} + +\section{2026-04-20 (evening) — Journal, Julia migration, app v1} +\label{sec:20260420-evening} + +\subsection*{Origin of the session} + +Dane (post-dinner) green-lit three tracks discussed in the afternoon: +\begin{enumerate} + \item LaTeX lab journal as a multi-modal invention log; daily + entries; A-style for retroactive, B-style for live with + \texttt{\textbackslash apass\{\}} markers. + \item Full Julia migration of the MATLAB code, since the nonlinear + reach experiments made it clear we'd live in Julia anyway. + Delete MATLAB. + \item ``App v1'' as a Pluto.jl notebook — a stand-alone read-only + renderer of \texttt{predicates.json} with the boolean $\to$ + halfspace bridge made visible. Edit UX present but + non-functional. +\end{enumerate} + +Direction at start: ``be ambitious, be creative, leave Easter eggs, +have fun.'' Auto mode on. + +\subsection*{What landed} + +\begin{enumerate} + \item \textbf{Journal scaffold}: \texttt{journal/} with + \texttt{preamble.tex} (callout boxes, code listings, + session-header macro, \texttt{\textbackslash apass\{\}} marker), + \texttt{journal.tex} (top-level aggregator), + \texttt{journal/README.md} (format conventions). + \item \textbf{Two retroactive A-style entries} reconstructed from + commit history + transcript: + \texttt{2026-04-17-controllers-linear-reach.tex} and + \texttt{2026-04-20-predicates-boundaries-julia-nonlinear.tex}. + Both at full invention-log depth. + \item \textbf{This entry} — B-style narrative with pointers. + \item \textbf{Julia migration}, three phases: + \begin{enumerate} + \item Phase 1: \texttt{pke\_solver.jl}, + \texttt{plot\_pke\_results.jl}, + \texttt{main\_mode\_sweep.jl}. Mode-sweep results + match MATLAB to 3--4 decimals on every state. + \item Phase 2: \texttt{reach\_linear.jl}, + \texttt{reach\_operation.jl}, + \texttt{barrier\_lyapunov.jl}, + \texttt{barrier\_compare\_OL\_CL.jl}, + \texttt{load\_predicates.jl}. Per-halfspace margins + match MATLAB exactly. + \item Phase 3: deleted \texttt{plant-model/} and + \texttt{reachability/*.m}; \texttt{git mv julia-port/ + code/}; updated all \texttt{CLAUDE.md}, + \texttt{README.md}, \texttt{WALKTHROUGH.md} references. + \end{enumerate} + \item \textbf{App v1}: \texttt{app/predicate\_explorer.jl}, a Pluto + notebook. Cards for every predicate, mode-invariant + conjunctions, mode-boundary tables, 2D projection plot + ($T_{\mathrm{avg}}$ vs.\ $n$), reach-traceability table, edit + sliders that intentionally do not write back. + \texttt{app/Project.toml} for deps. +\end{enumerate} + +\subsection*{Brief findings (pointers, A-pass later)} + +\apass{Quantify Julia-vs-MATLAB numerical equivalence properly. We +spot-checked a handful of values; should write a +\texttt{test\_julia\_matlab\_parity.jl} that compares trajectories +state-by-state at multiple horizons.} + +\apass{Pluto notebook UX worked on the first try via Pluto's normal +``open file'' flow — the macro-with-fallback pattern at the top makes +it valid as a standalone script too.} + +\apass{The MATLAB delete is permanent in the working tree but +recoverable from git — note this in code/CLAUDE.md as ``recover via +git history if archaeologically needed.''} + +\apass{The app's reach-traceability table is hand-maintained. Should +auto-populate from the latest reach-result \texttt{*.mat} files in +v2 — read them, parse per-halfspace margins, render directly.} + +\apass{Pluto has well-known version-control friction. The notebook +has $\sim$30 cells with UUIDs. Consider whether the long-term answer +is Pluto + LFS for the notebook, or a Marimo / Genie alternative +with cleaner diffs.} + +\subsection*{Easter eggs (intentional)} + +\begin{itemize} + \item Quote from ``U Want the Scoop?'' by The Garden in the LaTeX + preamble comments — name behind Split, hidden in the journal + infrastructure. + \item 🦎 emoji in the Pluto notebook header and closing line, plus + the same Garden lyric as a closer. + \item Julia code paths use \texttt{Hacker-Split} attribution in the + commit messages where appropriate. +\end{itemize} + +Nothing that clutters the substance. All kept subtle enough that a +future agent has to be looking to find them. + +\subsection*{Soundness status of the session} + +\begin{limitation} +This session was \emph{infrastructure work} — journal scaffold, Julia +port, app shell. Zero new safety claims about the plant. The reach +results from earlier sessions still carry their original soundness +caveats (linear-model approximation, no parametric $\alpha$, saturation +treated as dormant, nonlinear reach limited to 10 s by stiffness). The +ground hasn't moved; only the tools we use to stand on it have. +\end{limitation} + +\subsection*{Open at close} + +\apass{All open items from previous entries still apply (reduced-order +PKE for nonlinear heatup reach; polytopic / SOS barriers; parametric +$\alpha$ uncertainty; sound reach via Taylor remainder; scram and +shutdown reach; pinned tech-spec numbers). Plus some new ones from +this session:} + +\begin{itemize} + \item App v2: write-back to \texttt{predicates.json} with diff view. + \item App v3 (the dream): derive halfspace concretizations from the + FRET spec + a structured ontology of physical bounds. + \item Numerical-equivalence test: Julia vs.\ MATLAB pointwise. + \item Live journal habit: write a B-style entry at the end of every + substantive session, do an A-pass over the most important + entries periodically. +\end{itemize} + +\subsection*{Commit summary} + +This session produced four commits on \texttt{main}: +\begin{itemize} + \item \texttt{fa45e96} — journal scaffold + 2 retroactive entries + + Julia migration phase 1+2 (bundled). + \item \texttt{} — Julia migration phase 3: delete MATLAB, + rename, update docs. + \item \texttt{} — Pluto predicate explorer. + \item \texttt{}. +\end{itemize}