commit 5b9719eb475b1f45dd3403fe1c219634f7c20f9f
parent e2ad4d9a0c05b6fcf96fa98edf4e05a335d9485f
Author: andrewlaack-collab <andrew.laack@imbue.com>
Date: Tue, 3 Feb 2026 00:56:19 +0000
Arch doc (#10)
Diffstat:
3 files changed, 130 insertions(+), 29 deletions(-)
diff --git a/README.md b/README.md
@@ -34,35 +34,7 @@ vet "Refactor storage layer" --base-commit main
Vet snapshots the repo and diff, optionally adds a goal and agent conversation, runs LLM checks, then filters/deduplicates findings into a final list of issues.
-TODO: Create rendering pipeline for this. GitHub MD doesn't directly support Graphviz.
-
-```dot
-digraph VET_DataFlow {
- rankdir=TB;
- node [shape=box, style=rounded];
-
- subgraph cluster_inputs {
- label="Inputs";
- diff [label="Git diff"];
- goal [label="Goal\n(optional)", style=dashed];
- history [label="Conversation history\n(optional)", style=dashed];
- }
-
- context [label="Repo snapshot"];
- checks [label="LLM checks"];
- post [label="Filter + deduplicate"];
- issues [label="Issues"];
-
- diff -> context;
- diff -> checks;
- goal -> checks [style=dashed];
- history -> checks [style=dashed];
- context -> checks;
-
- checks -> post;
- post -> issues;
-}
-```
+
## Why Vet
diff --git a/architecture.dot b/architecture.dot
@@ -0,0 +1,25 @@
+digraph VET_DataFlow {
+ rankdir=TB;
+ node [shape=box, style=rounded];
+
+ subgraph cluster_inputs {
+ label="Inputs";
+ diff [label="Git diff"];
+ goal [label="Goal\n(optional)", style=dashed];
+ history [label="Conversation history\n(optional)", style=dashed];
+ }
+
+ context [label="Repo snapshot"];
+ checks [label="LLM checks"];
+ post [label="Filter + deduplicate"];
+ issues [label="Issues"];
+
+ diff -> context;
+ diff -> checks;
+ goal -> checks [style=dashed];
+ history -> checks [style=dashed];
+ context -> checks;
+
+ checks -> post;
+ post -> issues;
+}
diff --git a/architecture.svg b/architecture.svg
@@ -0,0 +1,104 @@
+<?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.1 (0)
+ -->
+<!-- Title: VET_DataFlow Pages: 1 -->
+<svg width="352pt" height="378pt"
+ viewBox="0.00 0.00 352.00 378.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 373.5)">
+<title>VET_DataFlow</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-373.5 347.75,-373.5 347.75,4 -4,4"/>
+<g id="clust1" class="cluster">
+<title>cluster_inputs</title>
+<polygon fill="none" stroke="black" points="28.75,-280 28.75,-361.5 335.75,-361.5 335.75,-280 28.75,-280"/>
+<text xml:space="preserve" text-anchor="middle" x="182.25" y="-344.2" font-family="Times,serif" font-size="14.00">Inputs</text>
+</g>
+<!-- diff -->
+<g id="node1" class="node">
+<title>diff</title>
+<path fill="none" stroke="black" d="M81,-326.5C81,-326.5 48.5,-326.5 48.5,-326.5 42.5,-326.5 36.5,-320.5 36.5,-314.5 36.5,-314.5 36.5,-302.5 36.5,-302.5 36.5,-296.5 42.5,-290.5 48.5,-290.5 48.5,-290.5 81,-290.5 81,-290.5 87,-290.5 93,-296.5 93,-302.5 93,-302.5 93,-314.5 93,-314.5 93,-320.5 87,-326.5 81,-326.5"/>
+<text xml:space="preserve" text-anchor="middle" x="64.75" y="-303.45" font-family="Times,serif" font-size="14.00">Git diff</text>
+</g>
+<!-- context -->
+<g id="node4" class="node">
+<title>context</title>
+<path fill="none" stroke="black" d="M83.5,-252C83.5,-252 12,-252 12,-252 6,-252 0,-246 0,-240 0,-240 0,-228 0,-228 0,-222 6,-216 12,-216 12,-216 83.5,-216 83.5,-216 89.5,-216 95.5,-222 95.5,-228 95.5,-228 95.5,-240 95.5,-240 95.5,-246 89.5,-252 83.5,-252"/>
+<text xml:space="preserve" text-anchor="middle" x="47.75" y="-228.95" font-family="Times,serif" font-size="14.00">Repo snapshot</text>
+</g>
+<!-- diff->context -->
+<g id="edge1" class="edge">
+<title>diff->context</title>
+<path fill="none" stroke="black" d="M60.72,-290.32C58.82,-282.19 56.49,-272.28 54.34,-263.1"/>
+<polygon fill="black" stroke="black" points="57.79,-262.47 52.1,-253.53 50.97,-264.07 57.79,-262.47"/>
+</g>
+<!-- checks -->
+<g id="node5" class="node">
+<title>checks</title>
+<path fill="none" stroke="black" d="M173.62,-180C173.62,-180 111.88,-180 111.88,-180 105.88,-180 99.88,-174 99.88,-168 99.88,-168 99.88,-156 99.88,-156 99.88,-150 105.88,-144 111.88,-144 111.88,-144 173.62,-144 173.62,-144 179.62,-144 185.62,-150 185.62,-156 185.62,-156 185.62,-168 185.62,-168 185.62,-174 179.62,-180 173.62,-180"/>
+<text xml:space="preserve" text-anchor="middle" x="142.75" y="-156.95" font-family="Times,serif" font-size="14.00">LLM checks</text>
+</g>
+<!-- diff->checks -->
+<g id="edge2" class="edge">
+<title>diff->checks</title>
+<path fill="none" stroke="black" d="M78.76,-290.17C86.96,-279.55 97.16,-265.45 104.75,-252 115.85,-232.35 125.76,-208.81 132.68,-190.88"/>
+<polygon fill="black" stroke="black" points="135.9,-192.27 136.15,-181.68 129.35,-189.8 135.9,-192.27"/>
+</g>
+<!-- goal -->
+<g id="node2" class="node">
+<title>goal</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="180.38,-329 111.12,-329 111.12,-288 180.38,-288 180.38,-329"/>
+<text xml:space="preserve" text-anchor="middle" x="145.75" y="-311.7" font-family="Times,serif" font-size="14.00">Goal</text>
+<text xml:space="preserve" text-anchor="middle" x="145.75" y="-295.2" font-family="Times,serif" font-size="14.00">(optional)</text>
+</g>
+<!-- goal->checks -->
+<g id="edge3" class="edge">
+<title>goal->checks</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M145.34,-287.71C144.82,-262.82 143.93,-219.91 143.34,-191.49"/>
+<polygon fill="black" stroke="black" points="146.85,-191.73 143.14,-181.81 139.85,-191.88 146.85,-191.73"/>
+</g>
+<!-- history -->
+<g id="node3" class="node">
+<title>history</title>
+<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="327.38,-329 198.12,-329 198.12,-288 327.38,-288 327.38,-329"/>
+<text xml:space="preserve" text-anchor="middle" x="262.75" y="-311.7" font-family="Times,serif" font-size="14.00">Conversation history</text>
+<text xml:space="preserve" text-anchor="middle" x="262.75" y="-295.2" font-family="Times,serif" font-size="14.00">(optional)</text>
+</g>
+<!-- history->checks -->
+<g id="edge4" class="edge">
+<title>history->checks</title>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M246.32,-287.71C225,-262.04 187.77,-217.21 164.24,-188.87"/>
+<polygon fill="black" stroke="black" points="167.16,-186.92 158.08,-181.46 161.78,-191.39 167.16,-186.92"/>
+</g>
+<!-- context->checks -->
+<g id="edge5" class="edge">
+<title>context->checks</title>
+<path fill="none" stroke="black" d="M71.23,-215.7C82.99,-207.03 97.42,-196.4 110.23,-186.96"/>
+<polygon fill="black" stroke="black" points="112.01,-189.99 117.99,-181.24 107.86,-184.36 112.01,-189.99"/>
+</g>
+<!-- post -->
+<g id="node6" class="node">
+<title>post</title>
+<path fill="none" stroke="black" d="M192.38,-108C192.38,-108 93.12,-108 93.12,-108 87.12,-108 81.12,-102 81.12,-96 81.12,-96 81.12,-84 81.12,-84 81.12,-78 87.12,-72 93.12,-72 93.12,-72 192.38,-72 192.38,-72 198.38,-72 204.38,-78 204.38,-84 204.38,-84 204.38,-96 204.38,-96 204.38,-102 198.38,-108 192.38,-108"/>
+<text xml:space="preserve" text-anchor="middle" x="142.75" y="-84.95" font-family="Times,serif" font-size="14.00">Filter + deduplicate</text>
+</g>
+<!-- checks->post -->
+<g id="edge6" class="edge">
+<title>checks->post</title>
+<path fill="none" stroke="black" d="M142.75,-143.7C142.75,-136.41 142.75,-127.73 142.75,-119.54"/>
+<polygon fill="black" stroke="black" points="146.25,-119.62 142.75,-109.62 139.25,-119.62 146.25,-119.62"/>
+</g>
+<!-- issues -->
+<g id="node7" class="node">
+<title>issues</title>
+<path fill="none" stroke="black" d="M157.75,-36C157.75,-36 127.75,-36 127.75,-36 121.75,-36 115.75,-30 115.75,-24 115.75,-24 115.75,-12 115.75,-12 115.75,-6 121.75,0 127.75,0 127.75,0 157.75,0 157.75,0 163.75,0 169.75,-6 169.75,-12 169.75,-12 169.75,-24 169.75,-24 169.75,-30 163.75,-36 157.75,-36"/>
+<text xml:space="preserve" text-anchor="middle" x="142.75" y="-12.95" font-family="Times,serif" font-size="14.00">Issues</text>
+</g>
+<!-- post->issues -->
+<g id="edge7" class="edge">
+<title>post->issues</title>
+<path fill="none" stroke="black" d="M142.75,-71.7C142.75,-64.41 142.75,-55.73 142.75,-47.54"/>
+<polygon fill="black" stroke="black" points="146.25,-47.62 142.75,-37.62 139.25,-47.62 146.25,-47.62"/>
+</g>
+</g>
+</svg>