Files
werkrevisor/docs/werkrevisor-review-inside-dark.svg
claude-code db2fba45e7
werkator build succeeded after 00:09
werkator/werkrevisor-statistics build succeeded after 00:47
werkator/release build succeeded after 00:16
werkrevisor 0.52.0: diagrams of PR Lens in the result comment (#121)
See docs/prs for the PR document.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #121
Co-authored-by: claude-code <claude-code@javagil.de>
2026-10-18 20:57:15 +02:00

196 lines
14 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 900" width="1600" height="900" role="img" aria-label="Inside a werkrevisor review: configuration files, steps and the services they call">
<title>Inside a werkrevisor review</title>
<defs><style>
text { font-family: Inter, "IBM Plex Sans", "Segoe UI", Helvetica, Arial, sans-serif; fill: #e9efed; }
.title { font-size: 40px; font-weight: 700; letter-spacing: -0.5px; }
.subtitle { font-size: 21px; fill: #9fb0ad; }
.head { font-size: 15px; font-weight: 700; letter-spacing: 1.5px; fill: #9fb0ad; }
.card-title { font-size: 18px; font-weight: 700; }
.card-sub { font-size: 13.5px; fill: #9fb0ad; }
.card-item { font-size: 14.5px; fill: #b7c4c1; }
.used { font-size: 13px; font-weight: 600; fill: #5cc3d6; }
.num { font-size: 15px; font-weight: 700; fill: #0d1312; }
.step { font-size: 17.5px; font-weight: 700; }
.what { font-size: 14.5px; fill: #b7c4c1; }
.when { font-size: 13.5px; fill: #9fb0ad; font-style: italic; }
.chip { font-size: 12.5px; font-weight: 700; fill: #ffffff; letter-spacing: 0.3px; }
.svc { font-size: 18px; font-weight: 700; fill: #ffffff; }
.svc-text { font-size: 14px; fill: #b7c4c1; }
.note { font-size: 14.5px; fill: #b7c4c1; }
.footer { font-size: 14px; fill: #9fb0ad; }
</style></defs>
<rect width="1600" height="900" fill="#0d1312"/>
<text class="title" x="40" y="60">Inside a werkrevisor review</text>
<text class="subtitle" x="40" y="94">Which files configure it, which services it calls, and when.</text>
<rect x="30" y="118" width="380" height="752" rx="16" fill="#17201f"/>
<rect x="424" y="118" width="800" height="752" rx="16" fill="#17201f"/>
<rect x="1238" y="118" width="332" height="752" rx="16" fill="#17201f"/>
<text class="head" x="50" y="148">CONFIGURATION</text>
<text class="head" x="444" y="148">STEPS OF ONE REVIEW</text>
<text class="head" x="1258" y="148">ENVIRONMENT</text>
<rect x="46" y="164" width="348" height="132" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.5"/>
<text class="card-title" x="64" y="192">Host config</text>
<text class="used" x="378" y="192" text-anchor="end">steps 2–11</text>
<text class="card-sub" x="64" y="212">machine config, WERKREVISOR_CONFIG_TOML</text>
<text class="card-item" x="64" y="238">· model, provider order, budget</text>
<text class="card-item" x="64" y="258">· gate, engine, Jev endpoint</text>
<text class="card-item" x="64" y="278">· risk template, doc check</text>
<rect x="46" y="304" width="348" height="132" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.5"/>
<text class="card-title" x="64" y="332">.werkrevisor.toml</text>
<text class="used" x="378" y="332" text-anchor="end">steps 1–5, 7–9</text>
<text class="card-sub" x="64" y="352">repository, head of the default branch</text>
<text class="card-item" x="64" y="378">· hard and judged paths, DB schema</text>
<text class="card-item" x="64" y="398">· PR document globs, writing rules</text>
<text class="card-item" x="64" y="418">· Jev questions, risk template</text>
<rect x="46" y="444" width="348" height="132" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.5"/>
<text class="card-title" x="64" y="472">Risk templates</text>
<text class="used" x="378" y="472" text-anchor="end">steps 5, 9</text>
<text class="card-sub" x="64" y="492">per ecosystem, in werkrevisor</text>
<text class="card-item" x="64" y="518">· jvm-spring-backend: 16 categories</text>
<text class="card-item" x="64" y="538">· typescript-frontend: 15 categories</text>
<text class="card-item" x="64" y="558">· tuned in .werkrevisor.toml</text>
<rect x="46" y="584" width="348" height="132" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.5"/>
<text class="card-title" x="64" y="612">Built into werkrevisor</text>
<text class="used" x="378" y="612" text-anchor="end">steps 3–10</text>
<text class="card-sub" x="64" y="632">code and defaults</text>
<text class="card-item" x="64" y="658">· questions for files and findings</text>
<text class="card-item" x="64" y="678">· PR document check questions</text>
<text class="card-item" x="64" y="698">· limits, timeouts, defaults</text>
<rect x="46" y="724" width="348" height="132" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.5"/>
<text class="card-title" x="64" y="752">Files of the pull request</text>
<text class="used" x="378" y="752" text-anchor="end">steps 3, 6–8</text>
<text class="card-sub" x="64" y="772">read at the head commit</text>
<text class="card-item" x="64" y="798">· PR documents, e.g. docs/prs/*.md</text>
<text class="card-item" x="64" y="818">· AGENTS.md as context of the model</text>
<text class="card-item" x="64" y="838">· changed files in full or as excerpt</text>
<rect x="440" y="162" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="191" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="196" text-anchor="middle">1</text>
<text class="step" x="494" y="186">Read the pull request</text>
<text class="what" x="494" y="208">head, WIP title, earlier result and approval, files and diff; .werkrevisor.toml</text>
<rect x="1144" y="171" width="52" height="22" rx="11" fill="#5f6b69"/>
<text class="chip" x="1170" y="186" text-anchor="middle">Gitea</text>
<text class="when" x="1196" y="209" text-anchor="end">always</text>
<rect x="440" y="220" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="249" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="254" text-anchor="middle">2</text>
<text class="step" x="494" y="244">Rules</text>
<text class="what" x="494" y="266">hard paths, secrets, size, open questions, writing rules, mechanical files, images</text>
<rect x="1098" y="229" width="98" height="22" rx="11" fill="#0e6b7d"/>
<text class="chip" x="1147" y="244" text-anchor="middle">werkrevisor</text>
<text class="when" x="1196" y="267" text-anchor="end">always</text>
<rect x="440" y="278" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="307" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="312" text-anchor="middle">3</text>
<text class="step" x="494" y="302">PR documents</text>
<text class="what" x="494" y="324">each section and scenario: clear, specific, Gherkin used well</text>
<rect x="1159" y="287" width="37" height="22" rx="11" fill="#7446a8"/>
<text class="chip" x="1178" y="302" text-anchor="middle">Jev</text>
<text class="when" x="1196" y="325" text-anchor="end">engine classifier or combined</text>
<rect x="440" y="336" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="365" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="370" text-anchor="middle">4</text>
<text class="step" x="494" y="360">DB changesets</text>
<text class="what" x="494" y="382">deploy risk, loss of existing data</text>
<rect x="1159" y="345" width="37" height="22" rx="11" fill="#7446a8"/>
<text class="chip" x="1178" y="360" text-anchor="middle">Jev</text>
<text class="when" x="1196" y="383" text-anchor="end">schema files changed, judge = jev</text>
<rect x="440" y="394" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="423" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="428" text-anchor="middle">5</text>
<text class="step" x="494" y="418">Each changed file</text>
<text class="what" x="494" y="440">weakened checks, security, and the categories of the risk template</text>
<rect x="1159" y="403" width="37" height="22" rx="11" fill="#7446a8"/>
<text class="chip" x="1178" y="418" text-anchor="middle">Jev</text>
<text class="when" x="1196" y="441" text-anchor="end">path judge with scope all</text>
<rect x="440" y="452" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="481" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="486" text-anchor="middle">6</text>
<text class="step" x="494" y="476">PR document vs each file</text>
<text class="what" x="494" y="498">contradiction, unrelated change, data outflow</text>
<rect x="1159" y="461" width="37" height="22" rx="11" fill="#7446a8"/>
<text class="chip" x="1178" y="476" text-anchor="middle">Jev</text>
<text class="when" x="1196" y="499" text-anchor="end">doc check, PR document changed</text>
<rect x="440" y="510" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="539" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="544" text-anchor="middle">7</text>
<text class="step" x="494" y="534">Context for the model</text>
<text class="what" x="494" y="556">full files at the head; an economy model selects excerpt lines</text>
<rect x="1106" y="519" width="90" height="22" rx="11" fill="#24733e"/>
<text class="chip" x="1151" y="534" text-anchor="middle">OpenRouter</text>
<rect x="1048" y="519" width="52" height="22" rx="11" fill="#5f6b69"/>
<text class="chip" x="1074" y="534" text-anchor="middle">Gitea</text>
<text class="when" x="1196" y="557" text-anchor="end">full files on; excerpts for large files</text>
<rect x="440" y="568" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="597" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="602" text-anchor="middle">8</text>
<text class="step" x="494" y="592">Model review</text>
<text class="what" x="494" y="614">PR-Agent asks the model of the host config; it advises or decides</text>
<rect x="1106" y="577" width="90" height="22" rx="11" fill="#24733e"/>
<text class="chip" x="1151" y="592" text-anchor="middle">OpenRouter</text>
<text class="when" x="1196" y="615" text-anchor="end">not in classifier mode; budget left</text>
<rect x="440" y="626" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="655" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="660" text-anchor="middle">9</text>
<text class="step" x="494" y="650">Findings</text>
<text class="what" x="494" y="672">real defect, severity, risk category</text>
<rect x="1159" y="635" width="37" height="22" rx="11" fill="#7446a8"/>
<text class="chip" x="1178" y="650" text-anchor="middle">Jev</text>
<text class="when" x="1196" y="673" text-anchor="end">the model reported findings</text>
<rect x="440" y="684" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="713" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="718" text-anchor="middle">10</text>
<text class="step" x="494" y="708">Verdict and output</text>
<text class="what" x="494" y="730">worst reason; RED for risk and finding in one file or category</text>
<rect x="1106" y="693" width="90" height="22" rx="11" fill="#3b6fb6"/>
<text class="chip" x="1151" y="708" text-anchor="middle">Statistics</text>
<rect x="1048" y="693" width="52" height="22" rx="11" fill="#5f6b69"/>
<text class="chip" x="1074" y="708" text-anchor="middle">Gitea</text>
<rect x="944" y="693" width="98" height="22" rx="11" fill="#0e6b7d"/>
<text class="chip" x="993" y="708" text-anchor="middle">werkrevisor</text>
<text class="when" x="1196" y="731" text-anchor="end">always</text>
<rect x="440" y="742" width="768" height="52" rx="12" fill="#1e2927" stroke="#3a4a47" stroke-width="1.2"/>
<circle cx="466" cy="771" r="15" fill="#3aa3b8"/>
<text class="num" x="466" y="776" text-anchor="middle">11</text>
<text class="step" x="494" y="766">Diagrams</text>
<text class="what" x="494" y="788">PR Lens draws the change; SVGs on the comment, not in the verdict</text>
<rect x="1144" y="751" width="52" height="22" rx="11" fill="#5f6b69"/>
<text class="chip" x="1170" y="766" text-anchor="middle">Gitea</text>
<rect x="1048" y="751" width="90" height="22" rx="11" fill="#24733e"/>
<text class="chip" x="1093" y="766" text-anchor="middle">OpenRouter</text>
<text class="when" x="1196" y="789" text-anchor="end">[diagrams] enabled</text>
<rect x="440" y="804" width="768" height="42" rx="12" fill="#2e2615" stroke="#c99a3a" stroke-width="1.5"/>
<text class="note" x="462" y="830">A possible secret in the diff: nothing goes to Jev or a model, and the review is YELLOW.</text>
<rect x="1254" y="164" width="300" height="128" rx="12" fill="#1a2321" stroke="#3a4a47" stroke-width="1.2"/>
<rect x="1254" y="164" width="300" height="40" rx="12" fill="#0e6b7d"/>
<rect x="1254" y="192" width="300" height="12" fill="#0e6b7d"/>
<text class="svc" x="1272" y="191">Werkator</text>
<text class="svc-text" x="1272" y="230">starts a review for each head commit,</text>
<text class="svc-text" x="1272" y="252">its exit code is the merge gate</text>
<rect x="1254" y="304" width="300" height="128" rx="12" fill="#1a2321" stroke="#3a4a47" stroke-width="1.2"/>
<rect x="1254" y="304" width="300" height="40" rx="12" fill="#5f6b69"/>
<rect x="1254" y="332" width="300" height="12" fill="#5f6b69"/>
<text class="svc" x="1272" y="331">Gitea</text>
<text class="svc-text" x="1272" y="370">reads the PR; writes the comment,</text>
<text class="svc-text" x="1272" y="392">line comments, status, approval, merge</text>
<rect x="1254" y="444" width="300" height="128" rx="12" fill="#1a2321" stroke="#3a4a47" stroke-width="1.2"/>
<rect x="1254" y="444" width="300" height="40" rx="12" fill="#7446a8"/>
<rect x="1254" y="472" width="300" height="12" fill="#7446a8"/>
<text class="svc" x="1272" y="471">TypeSafe · Jev</text>
<text class="svc-text" x="1272" y="510">typed questions, probabilities;</text>
<text class="svc-text" x="1272" y="532">about 0.001 USD per review</text>
<rect x="1254" y="584" width="300" height="128" rx="12" fill="#1a2321" stroke="#3a4a47" stroke-width="1.2"/>
<rect x="1254" y="584" width="300" height="40" rx="12" fill="#24733e"/>
<rect x="1254" y="612" width="300" height="12" fill="#24733e"/>
<text class="svc" x="1272" y="611">OpenRouter</text>
<text class="svc-text" x="1272" y="650">MiniMax M3: model review;</text>
<text class="svc-text" x="1272" y="672">GPT-6 Luna: excerpts; key budget</text>
<rect x="1254" y="724" width="300" height="128" rx="12" fill="#1a2321" stroke="#3a4a47" stroke-width="1.2"/>
<rect x="1254" y="724" width="300" height="40" rx="12" fill="#3b6fb6"/>
<rect x="1254" y="752" width="300" height="12" fill="#3b6fb6"/>
<text class="svc" x="1272" y="751">Statistics service</text>
<text class="svc-text" x="1272" y="790">usage record with costs</text>
<text class="svc-text" x="1272" y="812">and seconds per phase</text>
<text class="footer" x="1560" y="890" text-anchor="end">git.javagil.de/mi/werkrevisor</text>
</svg>