Somu · Somasundaram Mahesh
7–8 October 2026 · Poshmark India Office · Chetpet
Wed and Thu · 10:30–11:50 IST
Day 1: Make agents trustworthy in our repos
Day 2: Orchestrate, don't prompt
Platform: base-mvvm-android-kt
A claim becomes a receipt.
A receipt becomes a rule.
A rule becomes a rail.
Four words
ClaimA message. "Done." A prompt assertion with no proof.
ReceiptCommand output, screenshot, logcat, a CI run.
RuleA test, a required check, an eval case.
RailA cloud agent opens a self-verifying pull request.
Trust is not a feeling. It is an artifact.
Their results, not our rate
Stripe1,300 merged pull requests a week. Minion-written, human-reviewed. Their number, February 2026. Self-reported.
PotetoAbout 2,000 pull requests a month. Her result, not our target.
Grok BotHundreds of pull requests a day. Their number, not ours. pstack is Lauren's quality practice, not a proven throughput cause.
An agent does not get to say done until it leaves a receipt.
The gap
Self-verification.
The gapThe weakest scored area. Autonomy stalls when an agent cannot prove its own change.
The diagnosisMost teams have skills. Few can prove a change works without a human.
The remedyNot more prompts. An executable verification loop.
RecordedNamed in the intro. Each team names its own gap.
Intent
One ticket. One command that can fail.
AGENTS.mdThe scope, and stop when green. Pull request #162 at e480eb2.
./verifydoctor, test, or assemble. It exits 0 or 1.
The mapHome, detail, loading and error, theme. Pull request #159.
Acceptance is a command, not a paragraph.
Isolated execution
A ticket goes in. A sandbox comes up.
Issue #164Detail shows User #1. The cloud agent opens pull request #165.
The run./verify doctor, then ./verify test. CI 37320968461 green. 10 minutes 33 seconds.
The phoneVedha SHIP at 6c4e4be. The CI apk on Nothing Phone (3).
The launchA person starts it. The finish can be automatic.
Evidence
A cold launch is not proof.
The apkThe exact CI build of pull request #165. Commit 6c4e4be. The same SHA on the phone.
Cold start672 ms.
The pathHome, a tap, Todo Details. The screen shows User #1.
RecordedRolex, 19:43 IST. Nothing Phone (3), A024.
A driven path is. The receipt survives cleanup.
Review
The author is not the reviewer.
The candidatePull request #162 at e480eb2. Read-only. It writes one report.
The reportPull request #166. Vedha validated it as workshop evidence.
The limitIt cannot push, approve, relabel, or merge.
The badgesA green check is status, not a review.
Eval
An eval is not an app test.
The set12 cases. 6 real pull requests, 6 synthetic.
Replay12 of 12. GitHub run 37318641680. Commit e480eb2.
Live modelA separate gate. No CI key, so it does not run here.
Correct is not the same as good. Neither is the same as fresh.
Merge
A human decision, sized by blast radius.
LowNo shared contract. Easy to revert. Green verify, then review.
OwnedOne team's code. A receipt is attached. A code owner reviews.
Blast radiusShared library, schema, auth, or infra. Extra reviewer, required check, staged rollout.
RISK_TIERS.md and CODEOWNERS are in pull request #162. Branch protection on main is absent.
Correction
A failure becomes a rule.
The red checkPull request #163. Expected User #1. The test saw User 1.
The fix015efb5. The same check went green.
A fix that is not recorded is a fix you will make again.
Where it lives
Write it as low as it goes.
Codebase
Required check, lint, compiler
Eval
Rules and AGENTS.md
Skill and verify command
Style guide
Prompt memory does not survive. The repo does. Stock detekt runs. No custom lint rule yet.
Debt
No promise of zero debt.
PreventTypes, the compiler, stock detekt. Recorded in pull request #162.
ContainNo custom lint rule yet. That is the known gap.
MeasureDependabot pull requests 154, 155, 156, 158, and 161 sit open.
A path for every correction, and an owner. A gardener run does not exist yet.
The map
A map that rots is worse than no map.
The passPull request #167. Home, detail, loading and error, theme.
The phoneNothing Phone (3). ./verify test, 33 green. CI 37328150477.
The reviewVedha SHIP. Unmerged, so it is not on main.
Better memory makes the next intent cheaper.
Automation raises the ceiling.
Proof and review set the safe one.
Higher throughput with evidence. Not a bug-free guarantee. 100 agents without proof is slop. Poteto's 2,000 a month is her case, not our target.
The bar
An intern and Claude can navigate the repo.
A verify command exists
It drives one real user path
The evidence survives cleanup
A required check runs it
AGENTS.md says how to reach each feature
Leave with this
Day 1Every repo has a verify command and one green required check.
Day 2One workflow, an owner, and a gap to close.
The workflowWhich one will your pair own?
The ownerWho stewards it after Friday?
The gapWhat is the single thing still blocking?
Workflow
Coding
Trigger
Coding
You are an issue triage automation for Linear.
My name is called Somu or Somasudnaram M or msomu and we will work only on the issues that are assigned for me.
You will work only on issues that are assigned to me and skip other issues.
If the issue is neither not assigned to me, or not a bug report nor a feature request, do nothing. Do not comment, do not create noise.
If the issue status is only in TODO and there are no blockers or dependency issues open only then you will pick it. If the issue is `in progress`, `in review` or `qa review` or `done` or in `backlog` you will not pick this up and you won't do anything about this.
You will examine the issue. Add an eyes emoji reaction.
When creating sub Linear tickets or opening PRs, always assign them to me on both Linear and Github.
In Linear, assign to: Somasundaram M
In GitHub/PRs, assign to: msomu
When opening PRs, include a line like “Resolves BUG-123” or “Fixes BUG-123” where BUG-123 is the Linear issue ID, so the PR gets properly linked to the issue.
Bug report
If it’s a bug report, investigate the bug and report your findings. This can be either refuting the bug or explaining the likely root cause.
Use sentry logs to assist, if applicable. Query posthog events if needed.
If it’s an easy fix, move the ticket to In Progress and work on it and open a PR and assign it to somu-agi.
When ever possible add a mastero test case and add it to the PR checks so that this bug is never regressed again.
Make sure the Linear issue stays assigned to Somasundaram M.
Feature request
If it’s a feature request, plan out the high-level approach and comment with the approach. And if needed create sub-issues with all the context on Linear and move them to Todo so the other agents can pick them independently and work on it with separate PRs.
If it’s an easy change, move the ticket to in progress and implement the change and open a PR.
For all featuers as much as possible add a mastero test case and add it to the PR checks so that this feature is developed and tested end to end from day one.
Always assign the PR (if created one) to somu-agi, never miss this step, else it is going to be tough for me to get it merged.
Make sure the Linear issue stays assigned to Somasundaram M.
If you create a PR and if you think no testing is needed and if you think it is complete ready without any regression only then on the Slack channel #pr-review post a message asking for review from @Aryan @Sanju else don't post anything.
Action
Coding
Workflow
Daily Sync
Trigger
Daily Sync
Check the last 2 meetings on fireflies there should be "Daily Sync" and "Eng/Product Sync" from these two meetings grab all the Action Items that are discussed by Somu/Somasundaram M and check the linear if these relavent tickets are already created and there or not.
If there is a linear ticket already there leave it. Only if they are not there go ahead and create a linear ticket for it in the Iris project with the context from the meeting and assign it to Somasundaram M and set the status as Triage and put it in the current cycle by default override if these are menetioned on the meetings. Make sure to add a tshirt size for the issues created.
For every new ticket you create, post a message to the Slack channel #iris-app-issue-enricher with the issue title, the Linear issue link, the t-shirt size, and a short excerpt of the meeting context you used to create it.
If there are any other things mentioned and we need to update them on Linear let's do that as well all related to Somasundaram M only. Don't touch or change any other tickets that are not assigned to Somasundaram M
Action
Daily Sync
Workflow
Naman <> Somu
Trigger
Naman <> Somu
Check the last meeting on fireflies there should be meeting called "Naman <> Somu 1-on-1" from this meeting grab all the Action Items that are discussed by Somu/Somasundaram M and check the linear if these relavent tickets are already created and there or not.
If there is a linear ticket already there leave it. Only if they are not there go ahead and create a linear ticket for it in the Iris project with the context from the meeting and assign it to Somasundaram M and set the status as Triage and put it in the current cycle by default override if these are menetioned on the meetings. Make sure to add a tshirt size for the issues created.
For every new ticket you create, post a message to the Slack channel #iris-app-issue-enricher with the issue title, the Linear issue link, the t-shirt size, and a short excerpt of the meeting context you used to create it.
If there are any other things mentioned and we need to update them on Linear let's do that as well all related to Somasundaram M only. Don't touch or change any other tickets that are not assigned to Somasundaram M
Action
Naman <> Somu
From this room
From This Room to the Internet
A suggestion becomes a pull request.
It is on the site only after I merge.
A model answers.
A harness finishes.
Gather the context.
Ask the model.
Use a tool.
Repeat.
Three harnesses
Claude CodeThe terminal. It reads the project and keeps going.
CodexYou give it a job, not a single question.
CursorThe editor. It can see the code and open a pull request.
Three cars. One kind of engine.
What people stack on top
pstackProve it. The agent runs a real check before it can say it is done.
SuperpowersPlan it. Ask, write a plan, write a failing test, then review.
gstackStaff it. Garry Tan's setup splits the job across roles.
One person, many workers
Not one chat. A window full of workers.
Grok BotA fleet. Their number, not ours.
Several at onceClaude Code, Codex, and Cursor, open together.
cmuxA pane lights up when an agent needs you.
GhosttyThe terminal under cmux.
Pi, at pi.devSmall on purpose. You extend it.
I close the laptop.
The work keeps going.
What you are about to see
Watch this become a pull request.
LiveWispr records the room.
LiveA summary after you stop, once the recording is past five minutes.
LiveOne ticket, dictated. Wispr types. It does not file it.
LiveA person assigns it to Cursor, or Tony starts the agent.
Liveverify-msomu, if someone runs it on the local server.
What stays held
The last step is mine.
Not liveWispr does not file the tickets.
RecordedA ticket does not start an agent by itself.
RecordedA GitHub green check. This repo has no workflows.
HoldThe merge. My tap.
RecordedAlready on the site. Not this room. Not yet.