# 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.

## Structure

```
journal/
  preamble.tex         shared LaTeX setup (fonts, listings, callouts, macros)
  journal.tex          top-level aggregator (builds all entries into one PDF)
  entries/             dated session entries, one file per session
    YYYY-MM-DD-{topic-slug}.tex
  figures/             journal-specific figures (referenced from entries)
  README.md            this file
```

## Conventions

### Filename

`entries/YYYY-MM-DD-{topic-slug}.tex`. One file per session. If a day has multiple distinct sessions, use time-of-day in the slug (e.g., `2026-04-20-morning-predicates.tex` and `2026-04-20-evening-mega-session.tex`).

### Entry skeleton

```tex
\session{2026-04-17}{duration}{one-line summary}

\section{Session: ... (YYYY-MM-DD)}
\label{sec:YYYYMMDD}

\subsection*{Goal}
What I set out to do and why.

\subsection*{What landed}
...

\subsection*{Key decisions}
...

\subsection*{Dead ends}
...

\subsection*{Derivations}
...

\subsection*{Results}
...

\subsection*{Limitations recorded}
...

\subsection*{Open at close}
...
```

Entries compile standalone (each starts with `\input{../preamble.tex}` wrapped in a conditional so it only pulls preamble when not already loaded by `journal.tex`), or together via `journal.tex`.

### Two entry styles

- **A-style (deep / invention-log)**: full derivations, code commentary, dead-ends, embedded figures, terminal output where useful. Used for retroactive entries and sessions that land meaningful artifacts.
- **B-style (narrative + pointers)**: end-of-session notes. Uses `\apass{...}` callouts to flag spots that need a later A-pass.

### Callout boxes

From `preamble.tex`:

| Environment | Use |
|---|---|
| `derivation` | Math derivations |
| `decision` | Design choices with rationale + alternatives |
| `deadend` | Paths that didn't work |
| `limitation` | Soundness gaps, known-approximate behavior |

Plus the inline `\apass{text}` marker for A-pass TODOs.

### Code inclusion

- `\juliafile[options]{path/to/file.jl}` — includes a Julia source file as a numbered listing.
- `\matlabfile[...]{...}` — for MATLAB sources.
- Or inline with `lstlisting` environment and `language=Julia` for snippets.

Always include the path as the listing caption so readers can find the file.

### Figures

Figures live in `../docs/figures/` (shared with the thesis) or `figures/` (journal-only). The preamble sets `\graphicspath` to check both.

Always include:
1. A descriptive caption (what's on axes, what's being shown).
2. A discussion in the surrounding prose — *what the figure proves or illustrates*. Figures without discussion are noise.

### Terminal output

For a numerical result or an error that drove a decision, include the actual terminal text in a `lstlisting` block with `style=terminal`:

```tex
\begin{lstlisting}[style=terminal]
TMJets: 10583 reach-sets
T_c envelope: [274.45, 295.0] C
FAILED: AssertionError: radius must be nonnegative
\end{lstlisting}
```

Don't include full logs — only the lines that changed what you did next.

## Build

```bash
cd journal
latexmk -pdf journal.tex            # whole journal as one PDF
latexmk -pdf entries/2026-04-17-controllers-linear-reach.tex  # one entry
```

Requires TeX Live with `tcolorbox`, `listings`, `inconsolata`, `siunitx`, `cleveref`, `hyperref`, `fancyhdr`. All in the standard distribution.

## Not a replacement for

- `claude_memory/` — short AI-context notes, Markdown, different audience.
- `reachability/WALKTHROUGH.md` — standalone doc summarizing current state of reach analysis.
- Git commit messages — per-commit rationale for code changes.

The journal is the *chronological narrative* of the work. The others are snapshots, summaries, or pointers. They're all legitimate; they do different things.
