---
Title: I built a machine for settling arguments. Then I asked it where to fish.
Author: Erik Benjaminson
Published: 2026-07-24T12:00:00.000Z
Modified: 2026-07-24T12:00:00.000Z
Description: A multi-agent research council that settles architecture arguments at work, pointed at a personal question: which river, which stretch, which day. The brief is the whole job.
URL: https://sapienttech.dev/posts/where-to-fish
---

![An older pickup truck parked on wet gravel at the edge of a dark treeline before sunrise, frost still on the windshield, a single streetlight down the road](./hero.png)

<style>
:root {
  --fn-surface: #f8faf8;
  --fn-surface-2: #e2e9e5;
  --fn-ink: #121d1a;
  --fn-muted: #53635c;
  --fn-rule: #c5d1ca;
  --fn-rule-strong: #a3b4ac;
  --fn-accent: #0e5c51;
  --fn-accent-soft: #d9e8e2;
  --fn-slate: #55677a;
  --fn-slate-soft: #e0e6eb;
  --fn-warn: #85570d;
  --fn-mono: "Cascadia Mono", "Cascadia Code", Consolas, "SF Mono", Menlo, "DejaVu Sans Mono", ui-monospace, monospace;
}

html[data-theme="dark"] {
  --fn-surface: #121c19;
  --fn-surface-2: #192420;
  --fn-ink: #dae4df;
  --fn-muted: #879b92;
  --fn-rule: #23312c;
  --fn-rule-strong: #34453e;
  --fn-accent: #58c9ac;
  --fn-accent-soft: #102e28;
  --fn-slate: #8b9fb0;
  --fn-slate-soft: #172129;
  --fn-warn: #c99c4c;
}

/* ---------- section rail ---------- */
.fn-rail {
  font-family: var(--fn-mono);
  font-size: 0.6875rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--fn-muted);
  border-top: 2px solid var(--fn-accent);
  padding-top: 0.55rem;
  margin: 2.75rem 0 0.35rem;
  display: flex;
  align-items: baseline;
  gap: 0.7rem;
}
.fn-rail b {
  color: var(--fn-accent);
  font-weight: 400;
  font-size: 1rem;
  letter-spacing: 0.02em;
  font-variant-numeric: tabular-nums;
}

/* ---------- braid figure ---------- */
.fn-fig {
  margin: 2.25rem 0;
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
}
.fn-fig-frame {
  border: 1px solid var(--fn-rule);
  background:
    repeating-linear-gradient(to bottom, transparent 0 23px, var(--fn-rule) 23px 24px),
    var(--fn-surface);
  padding: 0.9rem 0.6rem 0.65rem;
  position: relative;
}
.fn-fig-frame::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--fn-surface);
  opacity: 0.955;
  pointer-events: none;
}
.fn-braid {
  position: relative;
  z-index: 1;
  display: block;
  width: 100%;
  height: auto;
}
.fn-braid-area { fill: var(--fn-accent); opacity: 0.07; }
.fn-braid-hair path {
  fill: none;
  stroke: var(--fn-accent);
  stroke-width: 0.7;
  opacity: 0.2;
  stroke-linecap: round;
}
.fn-braid-chan path {
  fill: none;
  stroke: var(--fn-accent);
  stroke-width: 1.45;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.fn-braid-trunk {
  fill: none;
  stroke: var(--fn-accent);
  stroke-width: 2.6;
  stroke-linecap: round;
}
.fn-braid-node { fill: var(--fn-accent); }
.fn-braid-marks line { stroke: var(--fn-rule); stroke-width: 1; }
.fn-braid-marks text,
.fn-braid-label text {
  font-family: var(--fn-mono);
  font-size: 12px;
  fill: var(--fn-muted);
}
.fn-braid-out { fill: var(--fn-accent) !important; }
.fn-braid-tick line { stroke: var(--fn-rule-strong); stroke-width: 1; }
.fn-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 1.15rem;
  font-family: var(--fn-mono);
  font-size: 0.7rem;
  letter-spacing: 0.04em;
  color: var(--fn-muted);
}
.fn-legend span::before {
  content: "";
  display: inline-block;
  width: 15px;
  height: 1px;
  background: var(--fn-accent);
  vertical-align: 0.32em;
  margin-right: 0.45rem;
}
.fn-fig figcaption {
  font-family: var(--fn-mono);
  font-size: 0.755rem;
  line-height: 1.68;
  color: var(--fn-muted);
}

/* ---------- comparison panels ---------- */
.fn-compare {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr));
  gap: 1px;
  background: var(--fn-rule);
  border: 1px solid var(--fn-rule);
  margin: 1.75rem 0;
}
.fn-panel {
  background: var(--fn-surface);
  padding: 1.45rem 1.4rem 1.15rem;
  display: flex;
  flex-direction: column;
  gap: 0.95rem;
}
.fn-panel-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; }
.fn-panel-tag {
  font-family: var(--fn-mono);
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  padding: 0.2rem 0.5rem;
}
.fn-panel-mark { flex: none; opacity: 0.75; }
.fn-panel--work .fn-panel-tag { background: var(--fn-slate-soft); color: var(--fn-slate); }
.fn-panel--work .fn-panel-mark { color: var(--fn-slate); }
.fn-panel--life .fn-panel-tag { background: var(--fn-accent-soft); color: var(--fn-accent); }
.fn-panel--life .fn-panel-mark { color: var(--fn-accent); }
.fn-panel-q { font-size: 1.02rem; line-height: 1.42; margin: 0; }
.fn-panel--work .fn-panel-q { color: var(--fn-slate); }
.fn-panel--life .fn-panel-q { color: var(--fn-accent); }
.fn-spec { display: flex; flex-direction: column; margin: 0; }
.fn-spec .fn-row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1.5rem;
  padding: 0.46rem 0;
  border-top: 1px solid var(--fn-rule);
  font-family: var(--fn-mono);
  font-size: 0.755rem;
  font-variant-numeric: tabular-nums;
  color: var(--fn-ink);
}
.fn-spec dt { color: var(--fn-muted); letter-spacing: 0.04em; flex: none; }
.fn-spec dd { margin: 0; text-align: right; }

/* ---------- fine print ---------- */
.fn-fine {
  font-family: var(--fn-mono);
  font-size: 0.755rem;
  line-height: 1.66;
  color: var(--fn-muted);
}

/* ---------- question ledger ---------- */
.fn-qs { list-style: none; padding: 0; margin: 1.5rem 0; counter-reset: fnq; }
.fn-qs li {
  counter-increment: fnq;
  display: grid;
  grid-template-columns: 3.4rem minmax(0, 1fr);
  gap: 0.25rem 1rem;
  padding: 0.9rem 0;
  border-top: 1px solid var(--fn-rule);
  margin: 0;
}
.fn-qs li::before {
  content: "Q" counter(fnq, decimal-leading-zero);
  font-family: var(--fn-mono);
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  color: var(--fn-accent);
  padding-top: 0.3rem;
  font-variant-numeric: tabular-nums;
}
.fn-qbody { display: flex; flex-direction: column; gap: 0.22rem; }
.fn-qbody h3 {
  font-family: var(--fn-mono);
  font-size: 0.95rem;
  font-weight: 600;
  line-height: 1.35;
  margin: 0;
  color: var(--fn-ink);
}
.fn-qs p { margin: 0; font-size: 1.01rem; color: var(--fn-muted); }

/* ---------- rivers ---------- */
.fn-rivers {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(13.5rem, 1fr));
  gap: 1px;
  background: var(--fn-rule);
  border: 1px solid var(--fn-rule);
  margin: 1.75rem 0;
}
.fn-river { background: var(--fn-surface); padding: 1.25rem 1.2rem 1.1rem; display: flex; flex-direction: column; gap: 0.8rem; }
.fn-river-art {
  display: block;
  width: 100%;
  height: auto;
  color: var(--fn-accent);
  background: var(--fn-surface-2);
  padding: 0.5rem;
}
.fn-river h3 {
  font-family: var(--fn-mono);
  font-size: 1.14rem;
  font-weight: 600;
  color: var(--fn-accent);
  letter-spacing: -0.012em;
  margin: 0;
}
.fn-river dl { margin: 0; display: flex; flex-direction: column; }
.fn-river .fn-row { display: flex; flex-direction: column; gap: 0.1rem; padding: 0.48rem 0; border-top: 1px solid var(--fn-rule); }
.fn-river dt {
  font-family: var(--fn-mono);
  font-size: 0.635rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--fn-muted);
}
.fn-river dd { margin: 0; font-size: 0.94rem; line-height: 1.4; color: var(--fn-ink); }

/* ---------- note ---------- */
.fn-note { border-left: 2px solid var(--fn-accent); padding: 0.15rem 0 0.15rem 1.15rem; margin: 1.75rem 0; }
.fn-note p { margin: 0; }
.fn-note p + p { margin-top: 0.75rem; }

/* ---------- guardrails ---------- */
.fn-rules { display: flex; flex-direction: column; margin: 1.5rem 0; }
.fn-rule-item {
  display: grid;
  grid-template-columns: 11rem minmax(0, 1fr);
  gap: 0.3rem 1.5rem;
  padding: 1rem 0;
  border-top: 1px solid var(--fn-rule);
  align-items: start;
}
.fn-rule-item .fn-k {
  font-family: var(--fn-mono);
  font-size: 0.7rem;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--fn-accent);
  padding-top: 0.32rem;
}
.fn-rule-item p { margin: 0; }
.fn-tag {
  font-family: var(--fn-mono);
  font-size: 0.78em;
  letter-spacing: 0.03em;
  padding: 0.08em 0.34em;
  background: var(--fn-accent-soft);
  color: var(--fn-accent);
  white-space: nowrap;
}
.fn-tag--warn { background: var(--fn-surface-2); color: var(--fn-warn); }

/* ---------- rounds ---------- */
.fn-rounds { list-style: none; margin: 1.5rem 0; padding: 0; position: relative; }
.fn-rounds-weave {
  position: absolute;
  left: 0;
  top: 1.4rem;
  bottom: 1.4rem;
  width: 2.6rem;
  color: var(--fn-rule-strong);
  pointer-events: none;
}
.fn-rounds li {
  display: grid;
  grid-template-columns: 3.7rem minmax(0, 1fr);
  gap: 0.25rem 1.2rem;
  padding: 0.8rem 0;
  margin: 0;
}
.fn-rounds li::before { content: none; }
.fn-rounds .fn-r {
  font-family: var(--fn-mono);
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--fn-accent);
  background: var(--color-background, #fff);
  border: 1px solid var(--fn-accent);
  width: 2.6rem;
  height: 2.6rem;
  display: grid;
  place-items: center;
  border-radius: 50%;
  position: relative;
  z-index: 1;
}
.fn-rbody { display: flex; flex-direction: column; gap: 0.3rem; padding-top: 0.4rem; }
.fn-rbody h3 {
  font-family: var(--fn-mono);
  font-size: 0.95rem;
  font-weight: 600;
  line-height: 1.35;
  margin: 0;
  color: var(--fn-ink);
}
.fn-rounds p { margin: 0; }

/* ---------- criteria + pull quote ---------- */
.fn-criteria { list-style: none; margin: 1.5rem 0; padding: 0; }
.fn-criteria li {
  padding: 0.78rem 0 0.78rem 1.6rem;
  border-top: 1px solid var(--fn-rule);
  position: relative;
  margin: 0;
}
.fn-criteria li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 1.45rem;
  width: 9px;
  height: 1px;
  background: var(--fn-accent);
}
.fn-pull {
  margin: 2.75rem 0;
  padding: 2rem 0;
  border-top: 1px solid var(--fn-rule-strong);
  border-bottom: 1px solid var(--fn-rule-strong);
  border-left: 0;
  font-style: normal;
  opacity: 1;
}
.fn-pull p {
  font-size: clamp(1.45rem, 3.8vw, 2.1rem);
  line-height: 1.2;
  letter-spacing: -0.022em;
  margin: 0;
  max-width: 21ch;
  color: var(--fn-accent);
  text-wrap: balance;
}
.fn-pull cite {
  display: block;
  margin-top: 0.9rem;
  font-family: var(--fn-mono);
  font-size: 0.7rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-style: normal;
  color: var(--fn-muted);
}

/* ---------- transfer + status ---------- */
.fn-transfer {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: 1px;
  background: var(--fn-rule);
  border: 1px solid var(--fn-rule);
  margin: 1.75rem 0;
}
.fn-transfer div { background: var(--fn-surface); padding: 1.05rem 1.1rem; }
.fn-transfer h3 {
  font-family: var(--fn-mono);
  font-size: 0.88rem;
  font-weight: 600;
  color: var(--fn-accent);
  margin: 0 0 0.3rem;
}
.fn-transfer p { margin: 0; font-size: 0.94rem; line-height: 1.46; color: var(--fn-muted); }
.fn-ticks {
  height: 13px;
  margin-top: 3rem;
  border-top: 1px solid var(--fn-rule);
  background-image:
    repeating-linear-gradient(to right, var(--fn-rule-strong) 0 1px, transparent 1px 110px),
    repeating-linear-gradient(to right, var(--fn-rule) 0 1px, transparent 1px 22px);
  background-size: 100% 12px, 100% 6px;
  background-repeat: no-repeat, no-repeat;
}
.fn-status {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: 0.6rem 2rem;
  font-family: var(--fn-mono);
  font-size: 0.72rem;
  color: var(--fn-muted);
  margin: 1.5rem 0;
}
.fn-status b { display: block; color: var(--fn-ink); font-weight: 400; }

@media (max-width: 640px) {
  .fn-rule-item { grid-template-columns: minmax(0, 1fr); }
  .fn-qs li { grid-template-columns: 2.6rem minmax(0, 1fr); }
}
</style>

At work this thing decides architecture. Which database. Which pattern. Which decision we are going to regret in eighteen months. It does not guess and it does not round up. It reads, it argues with itself, and it shows you where every number came from.

This morning I gave it a river.

<figure class="fn-fig">
<div class="fn-fig-frame">
<svg class="fn-braid" viewBox="0 0 900 290" role="img" aria-label="Diagram of a braided river channel. Four channels labeled run-data, regs-conditions, access-water and field-intel start apart on the left, weave and cross through the middle, and merge into a single channel on the right labeled report.md. Markers along the top read R0, R1, R2 and R3.">
<g class="fn-braid-marks">
<line x1="132.3" y1="27" x2="132.3" y2="41"/><text x="132.3" y="20" text-anchor="middle">R0</text>
<line x1="327.8" y1="27" x2="327.8" y2="41"/><text x="327.8" y="20" text-anchor="middle">R1</text>
<line x1="547.3" y1="27" x2="547.3" y2="41"/><text x="547.3" y="20" text-anchor="middle">R2</text>
<line x1="742.8" y1="27" x2="742.8" y2="41"/><text x="742.8" y="20" text-anchor="middle">R3</text>
</g>
<path class="fn-braid-area" d="M122 103.8L136 105.4L150 107L164 108.3L178 109.6L192 110.7L206 111.6L220 112.2L234 112.7L248 113L276 113.2L304 113.3L318 113.6L332 114.1L346 114.9L360 116.1L374 117.8L388 119.9L402 122.5L416 125.5L430 128.9L444 132.6L458 136.5L472 140.2L486 143.7L500 147L514 150L528 152.7L542 155.1L556 157.3L570 159.2L584 160.9L598 162.3L612 163.5L626 164.6L640 165.5L654 166.3L668 166.9L682 167.5L696 167.9L710 168.1L808 168.2L710 168.3L696 168.5L682 168.9L668 169.4L654 170.1L640 170.9L626 171.8L612 173L598 174.4L584 176L570 177.8L556 179.9L542 182.3L528 184.9L514 187.7L500 190.7L486 193.9L472 197.3L458 200.7L444 204.1L430 207.3L416 210L402 212.3L388 214.2L374 215.8L360 216.9L346 217.8L332 218.5L318 219.1L304 219.6L290 220.2L276 220.9L262 221.8L248 222.9L234 224.2L220 225.6L206 227.3L192 229L178 230.8L164 232.5L150 234.1L136 235.7L122 237.1 Z"/>
<g class="fn-braid-hair">
<path d="M122 103.8L136 105.4L150 107L164 108.3L178 109.6L192 110.7L206 111.6L220 112.2L234 112.7L248 113L276 113.2L304 113.3L318 113.6L332 114.1L346 114.9L360 116.1L374 117.8L388 119.9L402 122.5L416 125.5L430 128.9L444 132.6L458 136.5L472 140.2L486 143.7L500 147L514 150L528 152.7L542 155.1L556 157.3L570 159.2L584 160.9L598 162.3L612 163.5L626 164.6L640 165.5L654 166.3L668 166.9L682 167.5L696 167.9L710 168.1L808 168.2"/>
<path d="M122 128.3L136 127.3L150 126L164 124.5L178 122.9L192 121.5L206 120.2L220 119.2L234 118.6L248 118.3L262 118.6L276 119.2L290 120.4L304 122L318 124L332 126.4L346 129L360 131.8L374 134.6L388 137.6L402 140.4L416 143.2L430 145.8L444 148.3L458 150.5L472 152.4L486 154.1L500 155.6L514 156.9L528 158.1L542 159.2L556 160.2L570 161.3L584 162.2L598 163.2L612 164.1L626 165L640 165.8L654 166.5L668 167.1L682 167.6L696 167.9L710 168.1L808 168.2"/>
<path d="M122 133.9L136 133.4L150 133.3L164 133.6L178 134.2L192 135.3L206 136.6L220 138.3L234 140.2L248 142.1L262 144.1L276 145.9L290 147.7L304 149.2L318 150.4L332 151.4L346 152.2L360 152.7L374 153L388 153.2L402 153.3L416 153.5L430 153.8L444 154.2L458 154.8L472 155.6L486 156.5L500 157.4L514 158.5L528 159.6L542 160.8L556 161.9L570 163L584 164L598 164.9L612 165.7L626 166.4L640 166.9L654 167.4L668 167.7L682 167.9L696 168.1L808 168.2"/>
<path d="M122 160.2L136 161.8L150 163.2L164 164.4L178 165.4L192 166L206 166.3L220 166.2L234 165.8L248 165.1L262 164.1L276 163L290 161.7L304 160.5L318 159.4L332 158.4L346 157.6L360 157.2L374 157L388 157.2L402 157.7L416 158.4L430 159.4L444 160.6L458 161.8L472 163L486 164.1L500 165.1L514 165.9L528 166.6L542 167.1L556 167.5L570 167.8L584 167.9L668 168.1L808 168.2"/>
<path d="M122 182.7L136 181.5L150 180.1L164 178.5L178 176.9L192 175.2L206 173.7L220 172.4L234 171.3L248 170.5L262 170.1L276 170L290 170.2L304 170.7L318 171.5L332 172.4L346 173.4L360 174.3L374 175.2L388 175.9L402 176.4L416 176.6L430 176.6L444 176.2L458 175.6L472 174.9L486 174.1L500 173.2L514 172.3L528 171.5L542 170.7L556 170.1L570 169.5L584 169.1L598 168.8L612 168.5L640 168.3L808 168.2"/>
<path d="M122 188.7L136 188.5L150 188.7L164 189.2L178 190L192 191L206 192.2L220 193.5L234 194.8L248 196L262 196.9L276 197.6L290 198L304 198L318 197.6L332 196.8L346 195.6L360 194L374 192.2L388 190.1L402 187.9L416 185.7L430 183.5L444 181.3L458 179.3L472 177.6L486 176.2L500 175L514 174L528 173.2L542 172.6L556 172L570 171.5L584 171.1L598 170.7L612 170.3L626 169.9L640 169.5L654 169.2L668 168.9L682 168.6L696 168.4L724 168.2L808 168.2"/>
<path d="M122 216.6L136 218.1L150 219.3L164 220.4L178 221L192 221.2L206 220.8L220 220L234 218.7L248 217L262 215L276 212.7L290 210.3L304 207.7L318 205.2L332 202.7L346 200.4L360 198.3L374 196.3L388 194.6L402 193L416 191.5L430 190.1L444 188.7L458 187.3L472 185.9L486 184.6L500 183.3L514 181.9L528 180.5L542 179.1L556 177.7L570 176.3L584 175L598 173.7L612 172.5L626 171.5L640 170.6L654 169.8L668 169.2L682 168.8L696 168.5L710 168.3L808 168.2"/>
<path d="M122 237.1L136 235.7L150 234.1L164 232.5L178 230.8L192 229L206 227.3L220 225.6L234 224.2L248 222.9L262 221.8L276 220.9L290 220.2L304 219.6L318 219.1L332 218.5L346 217.8L360 216.9L374 215.8L388 214.2L402 212.3L416 210L430 207.3L444 204.1L458 200.7L472 197.3L486 193.9L500 190.7L514 187.7L528 184.9L542 182.3L556 179.9L570 177.8L584 176L598 174.4L612 173L626 171.8L640 170.9L654 170.1L668 169.4L682 168.9L696 168.5L710 168.3L808 168.2"/>
</g>
<g class="fn-braid-chan">
<path opacity="0.42" d="M122 112.2L136 114.1L150 115.9L164 117.6L178 119.2L192 120.8L206 122.2L220 123.5L234 124.5L248 125.4L262 126.1L276 126.6L290 127L304 127.3L318 127.5L332 127.7L346 128L360 128.4L374 129L388 129.8L402 130.9L416 132.4L430 134.2L444 136.5L458 138.9L472 141.5L486 144.1L500 146.6L514 149.2L528 151.6L542 154L556 156.2L570 158.2L584 160.1L598 161.8L612 163.2L626 164.5L640 165.6L654 166.4L668 167.1L682 167.6L696 167.9L710 168.1L808 168.2"/>
<path opacity="0.49" d="M122 160.3L136 159.6L150 158.7L164 157.5L178 156.1L192 154.5L206 152.9L220 151.2L234 149.6L248 148.1L262 146.8L276 145.7L290 144.8L304 144.3L318 144.1L332 144.3L346 144.8L360 145.6L374 146.8L388 148.3L402 149.9L416 151.8L430 153.7L444 155.7L458 157.7L472 159.5L486 161.1L500 162.5L514 163.7L528 164.7L542 165.5L556 166.2L570 166.7L584 167.1L598 167.4L612 167.6L626 167.7L654 167.9L696 168.1L808 168.2"/>
<path opacity="0.56" d="M122 180.9L136 179.4L150 178.1L164 177.1L178 176.3L192 175.8L206 175.6L220 175.7L234 176L248 176.6L262 177.4L276 178.4L290 179.5L304 180.6L318 181.8L332 182.8L346 183.8L360 184.5L374 185L388 185.2L402 185.1L416 184.7L430 184L444 182.9L458 181.7L472 180.3L486 179L500 177.6L514 176.2L528 174.9L542 173.7L556 172.6L570 171.7L584 170.9L598 170.2L612 169.6L626 169.2L640 168.8L654 168.6L668 168.4L696 168.2L808 168.2"/>
<path opacity="0.63" d="M122 216.7L136 218.2L150 219.9L164 221.6L178 223.4L192 225.1L206 226.5L220 227.7L234 228.6L248 229.1L262 229.2L276 228.9L290 228.1L304 226.9L318 225.2L332 223.1L346 220.6L360 217.7L374 214.6L388 211.2L402 207.6L416 203.9L430 200.2L444 196.4L458 192.8L472 189.6L486 186.7L500 184.1L514 181.8L528 179.7L542 178L556 176.4L570 175.1L584 173.9L598 172.9L612 171.9L626 171.1L640 170.4L654 169.8L668 169.3L682 168.8L696 168.5L710 168.3L808 168.2"/>
</g>
<path class="fn-braid-trunk" d="M719 168.2L808 168.2"/>
<circle class="fn-braid-node" cx="808" cy="168.2" r="3.1"/>
<g class="fn-braid-tick">
<line x1="116" y1="112.2" x2="122" y2="112.2"/><line x1="116" y1="160.3" x2="122" y2="160.3"/><line x1="116" y1="180.9" x2="122" y2="180.9"/><line x1="116" y1="216.7" x2="122" y2="216.7"/>
</g>
<g class="fn-braid-label">
<text x="111" y="112.2" text-anchor="end" dominant-baseline="middle">run-data</text>
<text x="111" y="160.3" text-anchor="end" dominant-baseline="middle">regs-conditions</text>
<text x="111" y="180.9" text-anchor="end" dominant-baseline="middle">access-water</text>
<text x="111" y="216.7" text-anchor="end" dominant-baseline="middle">field-intel</text>
<text class="fn-braid-out" x="819" y="168.2" text-anchor="start" dominant-baseline="middle">report.md</text>
</g>
</svg>
</div>
<div class="fn-legend"><span>run-data</span><span>regs-conditions</span><span>access-water</span><span>field-intel</span></div>
<figcaption>Four researchers. They work alone first, on purpose. Then they read each other and go looking for the weak spot. Then it all runs together into one report. A braided river does the same thing, which is either a nice coincidence or the reason I drew it this way.</figcaption>
</figure>

<p class="fn-rail"><b>01</b> The premise</p>

## Everybody is using this stuff to answer email

Every conversation I have about AI right now is about work. Ship faster. Close the ticket faster. Write the deck in four minutes instead of forty. Fine. Somebody had to say it and now everybody has.

Here is the part nobody mentions. Careful research used to cost a week. Now it costs an afternoon. And careful research was never really a work thing. It is what you would want before you pick a school, or a surgeon, or a used truck, or a river. Almost nobody does it, because who has a week.

I have a Saturday. So I spent this morning writing the question down properly.

<p class="fn-rail"><b>02</b> Two runs</p>

## Same machine, two weeks apart

Two weeks ago it spent about thirty five minutes on what an agentic software factory is. Sixty two sources. Three researchers. Nobody dissented, which almost never happens.

This week it gets three rivers and a Saturday. Same skill, same prompt files, same four rounds. I changed the brief. That is the entire difference.

<div class="fn-compare">
<article class="fn-panel fn-panel--work">
<div class="fn-panel-head">
<span class="fn-panel-tag">At work</span>
<svg class="fn-panel-mark" width="30" height="18" viewBox="0 0 30 18" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><path d="M2 3.5 L7.5 9 L2 14.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M11 14.5 H20" stroke-linecap="round"/><rect x="23" y="4" width="5" height="10" fill="currentColor" stroke="none" opacity="0.55"/></svg>
</div>
<p class="fn-panel-q">What does &ldquo;agentic software factory&rdquo; actually mean in July 2026, and how should the definition change over the next six months?</p>
<dl class="fn-spec">
<div class="fn-row"><dt>Run date</dt><dd>2026-07-11</dd></div>
<div class="fn-row"><dt>Researchers</dt><dd>3</dd></div>
<div class="fn-row"><dt>Sources cited</dt><dd>62</dd></div>
<div class="fn-row"><dt>Uncertainty tags</dt><dd>77 raw, 20 kept</dd></div>
<div class="fn-row"><dt>Dissents</dt><dd>0</dd></div>
<div class="fn-row"><dt>Start to finish</dt><dd>about 35 minutes</dd></div>
</dl>
</article>
<article class="fn-panel fn-panel--life">
<div class="fn-panel-head">
<span class="fn-panel-tag">At home</span>
<svg class="fn-panel-mark" width="30" height="18" viewBox="0 0 30 18" fill="none" stroke="currentColor" stroke-width="1.3" aria-hidden="true"><path d="M1 12.5 C6 12.5 6 5.5 11 5.5 C16 5.5 16 12.5 21 12.5 C25 12.5 26.5 9.5 29 9" stroke-linecap="round"/><path d="M1 16 C6 16 6 9 11 9 C16 9 16 16 21 16" stroke-linecap="round" opacity="0.4"/></svg>
</div>
<p class="fn-panel-q">One day of bank fishing. Three rivers. Eighteen days to pick from. Which river, which stretch, which day, and what would make me stay in bed.</p>
<dl class="fn-spec">
<div class="fn-row"><dt>Brief written</dt><dd>2026-07-24</dd></div>
<div class="fn-row"><dt>Researchers</dt><dd>4</dd></div>
<div class="fn-row"><dt>Questions</dt><dd>10</dd></div>
<div class="fn-row"><dt>Rivers</dt><dd>Kalama, Cowlitz, Wynoochee</dd></div>
<div class="fn-row"><dt>Window</dt><dd>2026-07-24 to 2026-08-10</dd></div>
<div class="fn-row"><dt>History to pull</dt><dd>up to 20 years</dd></div>
</dl>
</article>
</div>

<p class="fn-fine">The work run is finished, so those are results. The fishing run is not, so those are the settings going in. What follows is the input. The input is where all the work is.</p>

<p class="fn-rail"><b>03</b> The brief</p>

## Ten questions, and not one of them is "is the fishing good"

The machine does not get a question. It gets a brief. What I am deciding, what is in bounds, the rules it has to follow, what finished looks like. A sloppy brief buys you a confident report that is wrong. So this part I still write by hand.

<ol class="fn-qs">
<li><div class="fn-qbody"><h3>How many fish are in</h3><p>Real counts on each river this year, with a date attached. Plus how much of a normal season is usually in by now. A big number in July is not the same animal as a big number in September.</p></div></li>
<li><div class="fn-qbody"><h3>What they predicted</h3><p>What the preseason forecast said, which document said it, how they arrived at it, and whether the fish are running ahead of it or behind it.</p></div></li>
<li><div class="fn-qbody"><h3>Where this year sits</h3><p>Against the last five, ten, and twenty. Then every reason that comparison might be a lie. They changed how many smolt go in. They changed how they count. The program itself changed. Any one of those and you are comparing two different things.</p></div></li>
<li><div class="fn-qbody"><h3>The rules, exactly</h3><p>Which stretches are open, by river mile. Season dates. Daily limit. What you can keep. Gear rules. Night closure. Every one cited to the published regulation with a link and the day it was read. Including which markers I have to find on the bank with my own eyes.</p></div></li>
<li><div class="fn-qbody"><h3>What could shut it down</h3><p>Which emergency rules are live. The exact number that trips each one. Who announces it. How much warning you normally get. And the single page I check at four in the morning before I put the truck in gear.</p></div></li>
<li><div class="fn-qbody"><h3>Water and weather</h3><p>Flow, temperature, and clarity by gauge number. Dam release schedules. And which hours are honestly fishable, which in late July is a shorter list than anyone wants to admit.</p></div></li>
<li><div class="fn-qbody"><h3>Where I can stand</h3><p>Holes and drifts you can reach on foot. Where to park. Where you would be trespassing. Where the tribal water starts. Ranked by crowded and by hard. And straight about the spots where a guy in a boat beats me no matter what I do.</p></div></li>
<li><div class="fn-qbody"><h3>What people are saying</h3><p>Forums, Reddit, the Facebook groups, YouTube, shop reports. Dated and attributed. Real catches separated from guys repeating what they heard. Then held up against the actual creel numbers, because slow is a memory, not a measurement.</p></div></li>
<li><div class="fn-qbody"><h3>What is working</h3><p>What is producing this year and what is not. Fly and gear. Which water, which hours.</p></div></li>
<li><div class="fn-qbody"><h3>The call</h3><p>One day. Then two days. Name the river, name the stretch, name the date, hour by hour, drive time from my driveway, and the one thing that calls the whole trip off.</p></div></li>
</ol>

<p class="fn-rail"><b>04</b> The catch</p>

## Three rivers, three different machines counting fish

This is the part I would show a friend who does not fish.

The Cowlitz counts fish at a separator below a dam. The Kalama counts them at a hatchery rack. The Wynoochee counts them in a trap. Three numbers. Three different objects.

<div class="fn-rivers">
<article class="fn-river">
<svg class="fn-river-art" viewBox="0 0 160 74" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="M4 14 C40 10 60 20 96 16 C124 13 140 17 156 14" opacity="0.45" stroke-linecap="round"/><path d="M4 60 C40 64 60 54 96 58 C124 61 140 57 156 60" opacity="0.45" stroke-linecap="round"/><path d="M72 12 V62 M80 12 V62 M88 12 V62 M96 12 V62 M104 12 V62" stroke-linecap="round"/><path d="M66 8 H110" stroke-linecap="round"/><path d="M22 34 h20 m0 0 l-5 -4 m5 4 l-5 4" stroke-linecap="round" stroke-linejoin="round" opacity="0.7"/><path d="M22 46 h13 m0 0 l-4 -3 m4 3 l-4 3" stroke-linecap="round" stroke-linejoin="round" opacity="0.4"/><path d="M124 36 C132 30 140 42 148 36" opacity="0.5" stroke-linecap="round"/></svg>
<h3>Kalama</h3>
<dl>
<div class="fn-row"><dt>Basin</dt><dd>Lower Columbia tributary</dd></div>
<div class="fn-row"><dt>County</dt><dd>Cowlitz</dd></div>
<div class="fn-row"><dt>Counted at</dt><dd>Hatchery rack and trap at the falls</dd></div>
</dl>
</article>
<article class="fn-river">
<svg class="fn-river-art" viewBox="0 0 160 74" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="M4 22 C34 22 44 20 62 20" opacity="0.45" stroke-linecap="round"/><path d="M4 52 C34 52 44 54 62 54" opacity="0.45" stroke-linecap="round"/><path d="M62 8 V66" stroke-linecap="round"/><path d="M62 37 L92 18" stroke-linecap="round"/><rect x="94" y="8" width="46" height="22" opacity="0.95"/><rect x="94" y="44" width="46" height="22" opacity="0.5"/><path d="M62 37 L92 56" opacity="0.5" stroke-linecap="round"/><path d="M20 37 h20 m0 0 l-5 -4 m5 4 l-5 4" stroke-linecap="round" stroke-linejoin="round" opacity="0.7"/><path d="M104 19 h12 m0 0 l-4 -3 m4 3 l-4 3" stroke-linecap="round" stroke-linejoin="round" opacity="0.6"/></svg>
<h3>Cowlitz</h3>
<dl>
<div class="fn-row"><dt>Basin</dt><dd>Lower Columbia tributary</dd></div>
<div class="fn-row"><dt>County</dt><dd>Lewis and Cowlitz, below Barrier Dam</dd></div>
<div class="fn-row"><dt>Counted at</dt><dd>Barrier Dam separator</dd></div>
</dl>
</article>
<article class="fn-river">
<svg class="fn-river-art" viewBox="0 0 160 74" fill="none" stroke="currentColor" stroke-width="1.4" aria-hidden="true"><path d="M4 18 C30 18 44 16 58 16" opacity="0.45" stroke-linecap="round"/><path d="M4 56 C30 56 44 58 58 58" opacity="0.45" stroke-linecap="round"/><rect x="70" y="14" width="72" height="46"/><path d="M70 14 L98 34 L70 54" opacity="0.85" stroke-linecap="round" stroke-linejoin="round"/><path d="M108 34 c6 -7 14 -7 20 0 c-6 7 -14 7 -20 0 Z" opacity="0.75"/><path d="M128 34 l8 -5 v10 Z" opacity="0.75"/><path d="M20 34 h26 m0 0 l-5 -4 m5 4 l-5 4" stroke-linecap="round" stroke-linejoin="round" opacity="0.7"/></svg>
<h3>Wynoochee</h3>
<dl>
<div class="fn-row"><dt>Basin</dt><dd>Chehalis</dd></div>
<div class="fn-row"><dt>County</dt><dd>Grays Harbor</dd></div>
<div class="fn-row"><dt>Counted at</dt><dd>Wynoochee Dam trap</dd></div>
</dl>
</article>
</div>

<div class="fn-note">
<p>Put those three numbers in the same column and they look like the same thing. They are not the same thing. That is how you end up driving two hours to the wrong river.</p>
<p>So the brief makes it a contract. Every researcher has to say out loud what their instrument physically counts, and over what stretch of time, and whether it can be compared to the others at all. Cross-river claims get converted to percent of that river's own ten year average for the same date, which is the only common denominator that survives the trip. Anything built on mismatched numbers gets tagged <span class="fn-tag">[UNVERIFIED]</span>. And when a number does not exist for one river, the box says <span class="fn-tag">[GAP]</span>. It does not quietly get filled in with something close.</p>
<p>Two of these rivers answer to one set of managers. The third answers to another. Different forecasts, different rule authority, different reasons to close. The brief says do not blend them, and it says it twice.</p>
</div>

<p class="fn-rail"><b>05</b> The rules</p>

## What makes it research instead of a guy talking

Every one of these is in there because the thing it stops is what happens by default. They go into every researcher word for word. Not up for discussion.

<div class="fn-rules">
<div class="fn-rule-item"><span class="fn-k">No proxies</span><p>There is a fish count at Bonneville Dam that is easy to get and would look terrific in a report. Both of my Columbia rivers come in below Bonneville. Those fish are headed somewhere else entirely. The most convenient number available is the wrong one, so the brief names it and bans it.</p></div>
<div class="fn-rule-item"><span class="fn-k">Source or silence</span><p>Every rule claim needs the published regulation, a link, and the date it was read. A limit somebody posted on a forum gets tagged <span class="fn-tag">[UNVERIFIED]</span> and it does not go near the trip plan. Not as a footnote. Not as a maybe.</p></div>
<div class="fn-rule-item"><span class="fn-k">Print the bad news</span><p>Blank days count. &ldquo;Nobody is catching anything&rdquo; counts. If the guys on the water say one thing and the counts say another, the report writes down that they disagree. It does not get to pick the happier one.</p></div>
<div class="fn-rule-item"><span class="fn-k">Quiet is data</span><p>A river that normally gets talked about in the last week of July, and this year, nothing. That is a finding. It goes in the report as a finding.</p></div>
<div class="fn-rule-item"><span class="fn-k">Grade the vibes</span><p>&ldquo;Guys are getting one or two&rdquo; means nothing by itself. One or two per what. The state publishes catch per rod hour going back years. Somebody's mood gets held up against that number before it counts as evidence.</p></div>
<div class="fn-rule-item"><span class="fn-k">No new forecasts</span><p>The machine reports what the official forecast said and how the year is running against it. It does not build one of its own. Anything about a day that has not happened yet gets tagged <span class="fn-tag fn-tag--warn">[PROJECTION]</span> and it is barred from the summary.</p></div>
<div class="fn-rule-item"><span class="fn-k">Argue against yourself</span><p>Each researcher owns a subject, not a river. Every one of them has to name which river their own evidence argues <em>against</em>. If the evidence likes all three, they have to say that out loud instead of inventing a preference.</p></div>
<div class="fn-rule-item"><span class="fn-k">Exact or nothing</span><p>&ldquo;Returns look good&rdquo; is not a finding. The brief spells out what a finding sounds like: <em>1,842 summer-run through the Cowlitz separator as of July 20, versus a ten year average of 2,610 for the same date.</em> Invented numbers, real shape. Every claim has to land like that.</p></div>
</div>

<p class="fn-fine">The tags. <span class="fn-tag">[GAP]</span> the number does not exist or could not be reached. <span class="fn-tag">[UNVERIFIED]</span> one source, and here is what would settle it. <span class="fn-tag fn-tag--warn">[PROJECTION]</span> a day that has not happened yet. My favorite line in the whole protocol file: a report with no <span class="fn-tag">[UNVERIFIED]</span> tags is suspicious, not impressive.</p>

<p class="fn-rail"><b>06</b> The rounds</p>

## Four rounds, and the third one is the one that matters

<ol class="fn-rounds">
<svg class="fn-rounds-weave" viewBox="0 0 40 400" preserveAspectRatio="none" fill="none" stroke="currentColor" stroke-width="1" aria-hidden="true"><path d="M20 0 C6 60 34 120 20 180 C6 240 34 300 20 400"/><path d="M20 0 C34 60 6 120 20 180 C34 240 6 300 20 400" opacity="0.45"/></svg>
<li><span class="fn-r">R0</span><div class="fn-rbody"><h3>Everybody gets the assignment</h3><p>The question, their piece of it, and the rules. Everybody answers with one line saying they got it. That is all. Repeating the instructions back is not free.</p></div></li>
<li><span class="fn-r">R1</span><div class="fn-rbody"><h3>Nobody talks to anybody</h3><p>Each one writes a near-final draft, a numbered list of sources with the day each was pulled, the claims they would defend if pushed, and the questions they want to put to the others. Alone. That part is deliberate. Four opinions are only worth colliding if they were four opinions to start with.</p></div></li>
<li><span class="fn-r">R2</span><div class="fn-rbody"><h3>Now they read each other</h3><p>Each one has to find a weak claim in every other draft. Each one has to argue against their own draft as hard as they can, including objections nobody raised. And each one has to name the thing they believe least. All three are required. Leave one out and the chair hands it back.</p></div></li>
<li><span class="fn-r">R3</span><div class="fn-rbody"><h3>The chair writes it</h3><p>Alone. Where two of them still disagree and neither will fold, the disagreement goes into the report by name, with what would settle it. Everybody agreeing is not the goal. Everybody agreeing is usually a sign that nobody pushed.</p></div></li>
</ol>

<p class="fn-fine">On the work run, round two is where it turned. One of them wrote this against their own argument: &ldquo;I cannot claim factories work AND claim deployable reliability stays coin-flip.&rdquo; Nobody asked them to. The round made them.</p>

<blockquote class="fn-pull">
<p>The report has to be willing to tell me to stay home.</p>
<cite>Success criteria, brief.md</cite>
</blockquote>

<p class="fn-rail"><b>07</b> Finished</p>

## What finished looks like

Written before the run, not after. Afterward you just grade to whatever you got.

<ul class="fn-criteria">
<li>I can leave the driveway at four in the morning on a named day with a river, a stretch, a plan, and a one minute check that it is still on. Without opening another tab.</li>
<li>Every count, flow, temperature, and rule carries a source and a date, exact enough that I could go run the same comparison myself.</li>
<li>A guy who has fished these three rivers for twenty years still learns one thing. A count trend, a program change, an access point, a rule that changed while he was not looking.</li>
<li>It is willing to say do not bother, this river is a bust this year. And it says it at the top, not on page nine.</li>
</ul>

<p class="fn-rail"><b>08</b> The point</p>

## The machine does not know it is on vacation

It runs the same four rounds on a river that it runs on a build versus buy call. None of the machinery is about software. It is about refusing to answer a question you have not actually looked into.

Which means the interesting move is not getting more done at work. It is looking at all the decisions in your own life you have been making off a forum post and a hunch.

<div class="fn-transfer">
<div><h3>The school</h3><p>Enrollment trend. Staff turnover. What the report card measures and what it leaves out. What parents say, sitting next to what the numbers say.</p></div>
<div><h3>The surgeon</h3><p>How many of your exact procedure they did last year. Published outcomes. Board actions. And why the review sites are built to mislead you.</p></div>
<div><h3>The truck</h3><p>Which model years fail and how. What it really costs at your mileage. Which recall in that list is the one that matters.</p></div>
<div><h3>The move</h3><p>Not the listicle. Water rights. Where the taxes are headed. Whether anybody will insure it. The commute at the hour you would really be driving it.</p></div>
</div>

I still have to stand in the water and cast. Nobody is doing that part for me. But I am going to be standing in the right water, at the right hour, on a river that is actually holding fish, and that is most of it.

This morning I gave it a river. Three of them, and eighteen days to choose from. I wrote all of this down before it ran. The report landed that afternoon. What it said is the next one.

<div class="fn-ticks"></div>

<div class="fn-status">
<div><b>Brief</b>written Fri 2026-07-24</div>
<div><b>Council</b>4 researchers plus a chair</div>
<div><b>Report</b>research-council/summer-steelhead-jul2026/report.md</div>
<div><b>Window</b>Fri 2026-07-24 to Mon 2026-08-10</div>
</div>

<p class="fn-fine">Everything on this page is the input. Quoted or shortened from the brief and the protocol file, plus results from the work run on 2026-07-11. No fish counts, flows, or regulations are claimed here. Those come out the other end, with sources and dates attached.</p>