<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Blog on jevreduce</title>
		<link>https://www.jevreduce.com/blog/</link>
		<description>Recent content in Blog on jevreduce</description>
		<generator>Hugo</generator>
		<language>en</language>
		
		
		
		
			<lastBuildDate>Sun, 20 Sep 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://www.jevreduce.com/blog/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>A question is not a stage</title>
				<link>https://www.jevreduce.com/blog/a-question-is-not-a-stage/</link>
				<pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://www.jevreduce.com/blog/a-question-is-not-a-stage/</guid>
				<description>&lt;p&gt;Five questions about a customer do not make five model calls. In jevreduce they make one, unless one of them cannot be asked until another is answered.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-packing-rule&#34;&gt;The packing rule&lt;/h2&gt;&#xA;&lt;p&gt;The compiler groups questions that can be answered from the same state with compatible model settings into a single request. Their answers do not become hidden context for each other. TypeSafe’s documentation is explicit that sibling answers stay separate, and the trace keeps one recorded judgment per question either way.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Every judgment keeps its request</title>
				<link>https://www.jevreduce.com/blog/every-judgment-keeps-its-request/</link>
				<pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://www.jevreduce.com/blog/every-judgment-keeps-its-request/</guid>
				<description>&lt;p&gt;A model answer you cannot reproduce is an opinion. jevreduce stores, for every judgment, the request body that was sent, the response body that came back, and the attempt that carried both. Everything the app shows in the right panel is read from those stored facts. Nothing is reconstructed from logs or chat history.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-chain&#34;&gt;The chain&lt;/h2&gt;&#xA;&#xA;&lt;figure class=&#34;article-diagram&#34; id=&#34;diagram-lineage&#34;&gt;&#xA;&#xA;  &lt;div class=&#34;ad-section-head&#34;&gt;&lt;strong&gt;Every answer has a path&lt;/strong&gt;&lt;span&gt;Each connection is a stored reference.&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;ol class=&#34;ad-lineage&#34;&gt;&#xA;    &lt;li&gt;&lt;i aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;b&gt;Record&lt;/b&gt;&lt;span&gt;Source snapshot&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;i aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;b&gt;Unit&lt;/b&gt;&lt;span&gt;Grouped evidence&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;i aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;b&gt;Attempt&lt;/b&gt;&lt;span&gt;Model request&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;i aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;b&gt;Response&lt;/b&gt;&lt;span&gt;Provider output&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;i aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;b&gt;Judgment&lt;/b&gt;&lt;span&gt;Typed answer&lt;/span&gt;&lt;/li&gt;&#xA;  &lt;/ol&gt;&#xA;  &lt;div class=&#34;ad-branches&#34;&gt;&lt;div&gt;&lt;b&gt;Filtered out?&lt;/b&gt;&lt;p&gt;The record stays in the trace with the rule that excluded it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Plugging Pylon, Fireflies and Attio into a reducer</title>
				<link>https://www.jevreduce.com/blog/plugging-pylon-fireflies-attio-into-a-reducer/</link>
				<pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://www.jevreduce.com/blog/plugging-pylon-fireflies-attio-into-a-reducer/</guid>
				<description>&lt;p&gt;A reducer never calls Pylon. It reads a snapshot that a Pylon connector published. That one boundary is what lets the same question run over support tickets on Monday and call transcripts on Tuesday without touching the workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;one-contract-for-every-source&#34;&gt;One contract for every source&lt;/h2&gt;&#xA;&#xA;&lt;figure class=&#34;article-diagram&#34; id=&#34;diagram-sources&#34;&gt;&#xA;&#xA;  &lt;div class=&#34;ad-section-head&#34;&gt;&lt;strong&gt;New data, a new snapshot&lt;/strong&gt;&lt;span&gt;Earlier runs keep their original inputs.&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;ad-three-step&#34;&gt;&#xA;    &lt;section class=&#34;ad-card&#34;&gt;&lt;span class=&#34;ad-eyebrow&#34;&gt;SOURCE DATA&lt;/span&gt;&lt;h3&gt;Import records&lt;/h3&gt;&lt;p&gt;Raw evidence&lt;br&gt;Structured fields&lt;br&gt;Source references&lt;/p&gt;&lt;/section&gt;&lt;span class=&#34;ad-arrow&#34; aria-hidden=&#34;true&#34;&gt;→&lt;/span&gt;&#xA;    &lt;section class=&#34;ad-stage&#34;&gt;&lt;span class=&#34;ad-eyebrow&#34;&gt;VALIDATE&lt;/span&gt;&lt;h3&gt;Check the contract&lt;/h3&gt;&lt;p&gt;Schema&lt;br&gt;Coverage&lt;br&gt;Provenance&lt;/p&gt;&lt;/section&gt;&lt;span class=&#34;ad-arrow&#34; aria-hidden=&#34;true&#34;&gt;→&lt;/span&gt;&#xA;    &lt;section class=&#34;ad-card&#34;&gt;&lt;span class=&#34;ad-eyebrow&#34;&gt;PIN INPUTS&lt;/span&gt;&lt;h3&gt;Versioned snapshots&lt;/h3&gt;&lt;p&gt;Run A → snapshot 1&lt;br&gt;Run B → snapshot 2&lt;/p&gt;</description>
			</item>
			<item>
				<title>What a reducer is, and what it is not</title>
				<link>https://www.jevreduce.com/blog/what-a-reducer-is/</link>
				<pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate>
				<guid>https://www.jevreduce.com/blog/what-a-reducer-is/</guid>
				<description>&lt;p&gt;A reducer is the evaluate stage in a jevreduce workflow. It takes one unit, a record or a group of records, binds it into a single request, asks Jev a fixed set of typed questions, and writes the answers back as data. The name is a nod to MapReduce. The nod stops there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-goes-in&#34;&gt;What goes in&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;The unit.&lt;/strong&gt; You choose it: one ticket, one customer with all of their tickets, one call transcript, one candidate pair. “Per customer” means grouping by the customer key and declaring which tickets go into the state. It does not mean renaming per-ticket scores as customer risk.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The state.&lt;/strong&gt; The fields from that unit the model is allowed to see, bound explicitly. Jev fetches nothing. A dataset reference in the instructions is not content.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;The questions.&lt;/strong&gt; Each has a type with a fixed answer shape. Each is written to name the fields it is about, because the model never sees your question IDs.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;figure class=&#34;article-diagram&#34; id=&#34;diagram-reducer&#34;&gt;&#xA;&#xA;  &lt;div class=&#34;ad-section-head&#34;&gt;&lt;strong&gt;One customer, one shared state&lt;/strong&gt;&lt;span&gt;Group the evidence before asking the model.&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;ad-three-step&#34;&gt;&#xA;    &lt;section class=&#34;ad-card&#34;&gt;&lt;span class=&#34;ad-eyebrow&#34;&gt;INPUT&lt;/span&gt;&lt;h3&gt;Northstar&lt;/h3&gt;&lt;p&gt;Ticket T01&lt;br&gt;Ticket T02&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
