PWR-HYBRID-3/fret-pipeline/diagrams/PWR_HYBRID_3_DRC_states.svg
Dane Sabo cebf8c167a Initial umbrella repo: thesis + FRET pipeline + plant model with first controllers
Folds three previously-separate pieces into one preliminary-example repo
for the HAHACS thesis:

- thesis/ (submodule) → gitea Thesis.git — the PhD proposal
- fret-pipeline/ — FRET requirements to AIGER controller (was
  ~/Documents/fret_processing/; prior single-commit history abandoned
  per user decision)
- plant-model/ — 10-state PKE + lumped T/H PWR model (was
  ~/Documents/PKE_Playground/; never version-controlled before)
- presentations/2026DICE/ (submodule) → gitea 2026DICE.git
- reachability/, hardware/ — empty placeholders for Thrust 3 and HIL
- docs/architecture.md — how the discrete and continuous layers compose
- claude_memory/ — session notes and scratch knowledge pattern

Plant model refactored to thesis naming (x, plant, u, ref); pke_th_rhs
now takes u as an explicit arg instead of reading rho_ext from the
params struct. First two controllers built to the contract
u = ctrl_<mode>(t, x, plant, ref): ctrl_null (baseline) and
ctrl_operation (stabilizing, proportional on T_avg). Validated under a
100% -> 80% Q_sg step: ctrl_operation reduces steady-state T_avg drift
~47% vs. the unforced plant.

Root CLAUDE.md emphasizes that CLAUDE.md files are living documents and
that any knowledge not captured before a session ends is lost forever;
claude_memory/ holds the session-level notes that haven't stabilized
enough to graduate into a CLAUDE.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 16:24:11 -04:00

112 lines
8.0 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.4 (20260321.0153)
-->
<!-- Title: Controller Pages: 1 -->
<svg width="948pt" height="149pt"
viewBox="0.00 0.00 948.00 149.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 144.75)">
<title>Controller</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-144.75 943.5,-144.75 943.5,4 -4,4"/>
<!-- s00 -->
<g id="node1" class="node">
<title>s00</title>
<path fill="#a8d8ea" stroke="black" stroke-width="1.5" d="M67,-0.5C67,-0.5 173.75,-0.5 173.75,-0.5 179.75,-0.5 185.75,-6.5 185.75,-12.5 185.75,-12.5 185.75,-24.5 185.75,-24.5 185.75,-30.5 179.75,-36.5 173.75,-36.5 173.75,-36.5 67,-36.5 67,-36.5 61,-36.5 55,-30.5 55,-24.5 55,-24.5 55,-12.5 55,-12.5 55,-6.5 61,-0.5 67,-0.5"/>
<text xml:space="preserve" text-anchor="middle" x="120.38" y="-13.6" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="12.00">MODE_SHUTDOWN</text>
</g>
<!-- s00&#45;&gt;s00 -->
<g id="edge2" class="edge">
<title>s00&#45;&gt;s00</title>
<path fill="none" stroke="#4a90d9" stroke-width="1.2" d="M105.2,-36.9C102.87,-46.42 107.92,-55 120.38,-55 127.18,-55 131.78,-52.43 134.17,-48.55"/>
<polygon fill="#4a90d9" stroke="#4a90d9" stroke-width="1.2" points="137.63,-49.05 135.33,-38.71 130.68,-48.23 137.63,-49.05"/>
<text xml:space="preserve" text-anchor="middle" x="120.38" y="-56.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#4a90d9">!t_avg_above_min</text>
</g>
<!-- s10 -->
<g id="node3" class="node">
<title>s10</title>
<path fill="#fffacd" stroke="black" stroke-width="1.5" d="M307.25,-31.5C307.25,-31.5 391.5,-31.5 391.5,-31.5 397.5,-31.5 403.5,-37.5 403.5,-43.5 403.5,-43.5 403.5,-55.5 403.5,-55.5 403.5,-61.5 397.5,-67.5 391.5,-67.5 391.5,-67.5 307.25,-67.5 307.25,-67.5 301.25,-67.5 295.25,-61.5 295.25,-55.5 295.25,-55.5 295.25,-43.5 295.25,-43.5 295.25,-37.5 301.25,-31.5 307.25,-31.5"/>
<text xml:space="preserve" text-anchor="middle" x="349.38" y="-44.6" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="12.00">MODE_HEATUP</text>
</g>
<!-- s00&#45;&gt;s10 -->
<g id="edge3" class="edge">
<title>s00&#45;&gt;s10</title>
<path fill="none" stroke="#228b22" stroke-width="1.2" d="M186.42,-27.38C216.86,-31.54 253.02,-36.48 283.44,-40.63"/>
<polygon fill="#228b22" stroke="#228b22" stroke-width="1.2" points="282.62,-44.05 293,-41.94 283.56,-37.12 282.62,-44.05"/>
<text xml:space="preserve" text-anchor="middle" x="240.5" y="-40.67" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#228b22">t_avg_above_min</text>
</g>
<!-- s01 -->
<g id="node2" class="node">
<title>s01</title>
<path fill="#77dd77" stroke="black" stroke-width="1.5" d="M635.25,-76.5C635.25,-76.5 740.5,-76.5 740.5,-76.5 746.5,-76.5 752.5,-82.5 752.5,-88.5 752.5,-88.5 752.5,-100.5 752.5,-100.5 752.5,-106.5 746.5,-112.5 740.5,-112.5 740.5,-112.5 635.25,-112.5 635.25,-112.5 629.25,-112.5 623.25,-106.5 623.25,-100.5 623.25,-100.5 623.25,-88.5 623.25,-88.5 623.25,-82.5 629.25,-76.5 635.25,-76.5"/>
<text xml:space="preserve" text-anchor="middle" x="687.88" y="-89.6" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="12.00">MODE_OPERATION</text>
</g>
<!-- s01&#45;&gt;s01 -->
<g id="edge4" class="edge">
<title>s01&#45;&gt;s01</title>
<path fill="none" stroke="#4a90d9" stroke-width="1.2" d="M668.65,-112.9C665.7,-122.42 672.1,-131 687.88,-131 696.5,-131 702.32,-128.43 705.35,-124.55"/>
<polygon fill="#4a90d9" stroke="#4a90d9" stroke-width="1.2" points="708.8,-125.11 706.83,-114.7 701.88,-124.07 708.8,-125.11"/>
<text xml:space="preserve" text-anchor="middle" x="687.88" y="-132.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#4a90d9">inv2_holds</text>
</g>
<!-- s11 -->
<g id="node4" class="node">
<title>s11</title>
<path fill="#ff6b6b" stroke="black" stroke-width="1.5" d="M847.75,-30.5C847.75,-30.5 927.5,-30.5 927.5,-30.5 933.5,-30.5 939.5,-36.5 939.5,-42.5 939.5,-42.5 939.5,-54.5 939.5,-54.5 939.5,-60.5 933.5,-66.5 927.5,-66.5 927.5,-66.5 847.75,-66.5 847.75,-66.5 841.75,-66.5 835.75,-60.5 835.75,-54.5 835.75,-54.5 835.75,-42.5 835.75,-42.5 835.75,-36.5 841.75,-30.5 847.75,-30.5"/>
<text xml:space="preserve" text-anchor="middle" x="887.62" y="-43.6" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="12.00">MODE_SCRAM</text>
</g>
<!-- s01&#45;&gt;s11 -->
<g id="edge5" class="edge">
<title>s01&#45;&gt;s11</title>
<path fill="none" stroke="#cc0000" stroke-width="1.2" d="M753.08,-79.57C775.74,-74.29 801.19,-68.37 823.74,-63.13"/>
<polygon fill="#cc0000" stroke="#cc0000" stroke-width="1.2" points="824.53,-66.54 833.48,-60.86 822.94,-59.72 824.53,-66.54"/>
<text xml:space="preserve" text-anchor="middle" x="794.12" y="-75.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cc0000">!inv2_holds</text>
</g>
<!-- s10&#45;&gt;s01 -->
<g id="edge6" class="edge">
<title>s10&#45;&gt;s01</title>
<path fill="none" stroke="#228b22" stroke-width="1.2" d="M403.91,-59.65C409.84,-60.66 415.79,-61.63 421.5,-62.5 485.16,-72.15 557.78,-80.74 610.93,-86.58"/>
<polygon fill="#228b22" stroke="#228b22" stroke-width="1.2" points="610.52,-90.06 620.84,-87.66 611.28,-83.1 610.52,-90.06"/>
<text xml:space="preserve" text-anchor="middle" x="513.38" y="-87.06" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#228b22">inv1_holds &amp; p_above_crit &amp; t_avg_in_range</text>
</g>
<!-- s10&#45;&gt;s10 -->
<g id="edge7" class="edge">
<title>s10&#45;&gt;s10</title>
<path fill="none" stroke="#4a90d9" stroke-width="1.2" d="M329.68,-67.9C326.65,-77.42 333.21,-86 349.38,-86 358.21,-86 364.18,-83.43 367.28,-79.55"/>
<polygon fill="#4a90d9" stroke="#4a90d9" stroke-width="1.2" points="370.73,-80.12 368.8,-69.7 363.82,-79.05 370.73,-80.12"/>
<text xml:space="preserve" text-anchor="middle" x="349.38" y="-87.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#4a90d9">(inv1_holds &amp; !t_avg_in_range) | (inv1_holds &amp; !p_above_crit)</text>
</g>
<!-- s10&#45;&gt;s11 -->
<g id="edge8" class="edge">
<title>s10&#45;&gt;s11</title>
<path fill="none" stroke="#cc0000" stroke-width="1.2" d="M404.25,-49.4C504.09,-49.21 717.35,-48.82 823.66,-48.62"/>
<polygon fill="#cc0000" stroke="#cc0000" stroke-width="1.2" points="823.35,-52.12 833.34,-48.6 823.33,-45.12 823.35,-52.12"/>
<text xml:space="preserve" text-anchor="middle" x="687.88" y="-50.18" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cc0000">!inv1_holds</text>
</g>
<!-- s11&#45;&gt;s00 -->
<g id="edge9" class="edge">
<title>s11&#45;&gt;s00</title>
<path fill="none" stroke="#228b22" stroke-width="1.2" d="M835.1,-45.48C829.25,-45.15 823.37,-44.81 817.75,-44.5 633.66,-34.27 587.77,-28.7 403.5,-22.5 334.03,-20.16 254.89,-19.19 198.14,-18.78"/>
<polygon fill="#228b22" stroke="#228b22" stroke-width="1.2" points="198.22,-15.28 188.2,-18.72 198.18,-22.28 198.22,-15.28"/>
<text xml:space="preserve" text-anchor="middle" x="513.38" y="-32.71" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#228b22">manual_reset</text>
</g>
<!-- s11&#45;&gt;s11 -->
<g id="edge10" class="edge">
<title>s11&#45;&gt;s11</title>
<path fill="none" stroke="#4a90d9" stroke-width="1.2" d="M870.71,-66.9C868.11,-76.42 873.75,-85 887.62,-85 895.22,-85 900.34,-82.43 903,-78.55"/>
<polygon fill="#4a90d9" stroke="#4a90d9" stroke-width="1.2" points="906.46,-79.08 904.3,-68.71 899.52,-78.16 906.46,-79.08"/>
<text xml:space="preserve" text-anchor="middle" x="887.62" y="-86.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#4a90d9">!manual_reset</text>
</g>
<!-- init -->
<g id="node5" class="node">
<title>init</title>
<ellipse fill="black" stroke="black" stroke-width="1.5" cx="9" cy="-18.5" rx="9" ry="9"/>
</g>
<!-- init&#45;&gt;s00 -->
<g id="edge1" class="edge">
<title>init&#45;&gt;s00</title>
<path fill="none" stroke="black" stroke-width="2" d="M18.58,-18.5C24.26,-18.5 32.33,-18.5 41.45,-18.5"/>
<polygon fill="black" stroke="black" stroke-width="2" points="41.4,-22 51.4,-18.5 41.4,-15 41.4,-22"/>
</g>
</g>
</svg>