Hussain Sehorewala
PortfolioWriting / AI architecture
Writing

The model of you: how a clone learns your judgment.

Part one walked the control loop. The hardest stage to believe is the third one — the resolver that answers a blocker as you. Where does that judgment come from? Not from a prompt. From your own past answers. So let me show you the actual data, and then turn it into a picture in front of you.

A clone that "acts like you" is only as honest as the data underneath it. If that data is a vibe, the clone is a vibe. So this post does something the marketing version never would: it opens the drawer. Below is the raw decision ledger — every blocker the loop hit and the answer it was given — pulled straight from the local store. Eleven rows. Then we'll watch those eleven rows become a map of how one engineer decides under pressure.

Step 1 — the raw data

When an autonomous run can't verify a step or hits a hard rule, it records an escalation: the blocker, a deterministic risk score from 0 to 1, and the human's answer (approve, skip, or takeover). This is that table, verbatim — nothing illustrative:

escalations — agent: hussain  (11 rows)
id risk decision blocker
#1  0.95  skip     HARD RULE: git push --force origin main
#2  0.30  approve  Build public/demo.html (not verified ×2)
#3  0.05  skip     Build public/demo.html (not verified ×2)
#4  0.05  approve  Smoke-test end-to-end (not verified ×2)
#5  0.75  takeover Smoke-test end-to-end (not verified ×2)
#6  0.75  approve  HARD RULE: chat.mjs — touches secrets
#7  0.05  open     platform/src/routes/chat (waiting on you)
#8  0.70  approve  HARD RULE: RiskReversal.tsx — sends external
#9  0.05  skip     Portfolio.tsx edit (not verified ×2)
#10 0.05  takeover Add Faq.tsx section (not verified ×2)
#11 0.05  takeover Create branch feat/sacred-dates (not verified ×2)
The actual escalation log from the decision store. Each row is a real moment the loop stopped and a real answer it was given.

Step 2 — the same data, made visible

Now plot every one of those eleven rows on a single axis — risk left to right, colored by the answer. Same data, no new numbers. Each row above becomes exactly one dot below:

How you answer under risk — 11 real decisions
risk 0.0 0.5 1.0 (hard rules) #3 skip #4 approve #10 takeover #11 takeover #9 skip #7 open #2 approve #8 approve (reviewed) #5 takeover #6 approve (reviewed) #1 force-push → SKIP approve skip takeover
The eleven rows, plotted. This isn't a smoothed marketing curve — it's a small, honest, slightly messy set of real calls. And even at eleven points, a shape appears.

Read it honestly, because the honesty is the point. The shape is not "high risk always stops." It's more specific and more human than that: the one genuinely dangerous thing — a force-push to main, risk 0.95 — was skipped outright. Several high-risk hard rules (touching secrets, sending something external) were approved, but only after they surfaced for review — the human looked and said yes. And a cluster of low-risk, twice-failed steps drew a spread of skip and takeover — "this isn't worth another autonomous attempt; I'll handle it." That spread is a real preference, and it's not one you could write down as a rule. It's only visible because it was recorded.

That is the entire thesis of the project in one chart: judgment is a distribution you can only see by capturing real decisions. No prompt produces this. No model knows it about you until it watches you.

Step 3 — how the resolver uses it

Those eleven rows aren't a dashboard. They're the resolver's working memory. When a new blocker arrives, the resolver does three concrete things with this exact data:

  • Retrieve. It ranks past blockers by keyword overlap with the new one, boosting same-category matches, and pulls the closest few. A new "not verified after 2 attempts" step retrieves #3, #4, #9 — your real answers to that exact situation.
  • Ground. It hands a local model your profile plus those retrieved rows and asks one question: given how this person answered these, what would they say now? The model returns a decision, a confidence, and which precedent drove it.
  • Apply, carefully. It acts only if the decision is actionable, the confidence clears the bar for that category, and it isn't a hard rule. Otherwise it does the honest thing and wakes you.

Two deliberate engineering choices make this trustworthy rather than spooky. It runs entirely on a local model — Ollama on your own machine, no row of that ledger ever leaving it — because a model of your judgment is about the most personal data there is. And it is built to grow: every time you answer a fresh escalation, that answer is written back as a new precedent, so the map above gains a point and the next retrieval is a little sharper. The clone earns its picture of you one real decision at a time.

Why show the raw data at all

Because a judgment system that won't show its evidence is just a confident stranger. The reason to open the ledger is the same reason the loop exists: an autonomous agent should be auditable down to the individual decision it learned from. You should be able to point at any dot on that chart and read the exact row it came from. When the data and the visualization are the same eleven facts seen two ways, there's nowhere for a marketing number to hide.

That's the standard worth holding AI products to. Not "trust the model." Show the data, show what you drew from it, and let the two line up in plain sight.

The ledger and the chart are the same eleven rows from the project's local decision store — one is the table, one is the picture. It's an open, local-first system; the decisions never leave your machine. Earlier in this series: the four-stage control loop.