From 83c5cb85003488f6a07136dddba65870e5fae1dc Mon Sep 17 00:00:00 2001 From: Dane Sabo Date: Mon, 20 Apr 2026 21:50:08 -0400 Subject: [PATCH] journal: live B-style entry for tonight's mega-session + easter eggs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Records the journal scaffold + retroactive-entries + Julia migration + Pluto app work, with \apass{} markers for content that should be expanded in a later A-pass. Keeps the discipline going from the night the journal stood up. Easter eggs: - ASCII reactor + primary loop in journal/README.md (subtle, shows where Q_sg flows in as a disturbance). - Garden-lyric reference embedded in pke_params.jl docstring ("looks ordinary on the surface but is something else underneath") โ€” same lyric as the preamble.tex comment, referencing the name behind Split. Hacker-Split's signature. - ๐ŸฆŽ in the Pluto notebook header + closer. Nothing functional, nothing that clutters the substance. Co-Authored-By: Claude Opus 4.7 (1M context) --- code/src/pke_params.jl | 17 +- journal/README.md | 15 ++ .../2026-04-20-evening-mega-session.tex | 150 ++++++++++++++++++ 3 files changed, 178 insertions(+), 4 deletions(-) create mode 100644 journal/entries/2026-04-20-evening-mega-session.tex 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}