Tom Horn Gaming ยท Koda Agent ยท Real Work

What It Actually Did.

Not a benchmark. Not a capability list. Five real stories from the Vivo Gaming integration โ€” what Koda built, what it caught, and what it unblocked.

5Real stories
1dFull integration scaffolded
0Cost to catch a prod bug
10sContract from spec

Five moments that actually happened.

๐Ÿ—๏ธ

Prateek brought Koda a blank integration task: implement Vivo Gaming's live dealer plugin from scratch. Koda read the provider spec, discovered the right reference pattern (BetSoft plugin for numeric gameIds โ€” not AleaPlay as first assumed), scaffolded the entire project structure (IntegrationCasino/VivoGaming/, .csproj, AssemblyInfo, BO config editor, DB post-deployment SQL), opened MR !3785, got pipeline 51996 green, and had the structure merged to feature/vivo_main โ€” all while keeping Prateek informed at every gate.

โœ… What would have taken a developer 2โ€“3 days of setup was done before lunch.
๐Ÿ”

During the GetBalance slice, the UnitTest CI job reported green. Koda checked the TRX artifact and found zero Vivo tests had actually executed โ€” the test runner was only processing Logic.Test.dll, not IntegrationCasino.Tests.dll where the Vivo tests live. Koda fixed the test runner script and added a fail-closed guard: the job now throws if the required Vivo test name is absent from the TRX.

โœ… That bug would have reached production undetected. Cost of finding it: 0.
โšก

Prateek told Tico that Koda already had answers to the open provider questions โ€” TrnDescription, History, tableGUID casing, isRoundFinished defaults โ€” answers that had been sitting in the debit docs for weeks. With those plugged in, the contract generator ran and the credit slice went from "blocked since 2026-07-29" to committed code in under 3 minutes (3e0790426).

โœ… Blocked since July 29. Unblocked and committed in under 3 minutes.
๐Ÿ›ก๏ธ

Multiple times Koda caught itself or was caught: staging a live BET without confirmed TrnDescription/History format, trying to advance a stage without evidence. The 9-stage SDLC Prateek built forced the discipline โ€” no "verified" without a pinned pipeline + TRX + named test. Wallet code is money-moving code. One bad rollback = double refund in production (it hit us in bugfix/1939, bugfix/777).

โœ… The process overhead was real. So was the protection.
๐Ÿ“„

We discovered that credit was marked "blocked โ€” missing provider docs" while the docs were sitting in another slice's folder. We built a deterministic generator from the OpenAPI spec: 54 constraints, 155 named test assertions, 39 error codes โ€” all derived automatically. Every new slice now starts with a complete, traced, machine-generated contract in under 10 seconds.

โœ… No human writes requirements.md prose anymore.

How we actually build integrations with Koda.

Two things made the Vivo integration work at scale: a disciplined 9-stage SDLC that gates every step on real evidence, and a contract-first methodology that eliminates manual requirements work. Both came from real pain โ€” not theory.

The 9-Stage Integration SDLC

S1

Requirement Analysis

Read the provider spec, enumerate every API flow, list every open question. No assumptions โ€” every unknown is flagged before implementation starts. This is where AleaPlay vs BetSoft was caught.

S2

Requirements Review

A separate model pass checks completeness, correctness, traceability, and authentication coverage. Not a formality โ€” this is where gaps in spec coverage surface before design commits to anything.

S3

๐Ÿšฆ Gate: Human Green Light

Prateek explicitly approves. Nothing moves to design without this token. The gate is the contract between the agent and the human โ€” skip it and the whole SDLC collapses.

S4

Design

Architecture decisions locked: reference pattern confirmed, house patterns applied (correct cache, correct config table). Design doc is the checklist Koda ticks in the MR description โ€” not background reading.

S5

Implementation

One narrow branch per slice. feature/vivo_debit, feature/vivo_credit, status API โ€” each separate, each with a known expected output before code is written.

S6

Unit Testing

Tests written against the contract, not against the code. "Green CI" is insufficient โ€” the TRX artifact must prove the right test assembly ran. This is how Story 02's bug was caught.

S7

๐Ÿšฆ Gate: Evidence Review

Pinned pipeline + TRX file + named test present = advance. Missing any one = loop back. Wallet code is money-moving code โ€” no shortcuts.

S8

MR + Human Review

MR opened, Prateek reviews. Small, reviewable slice = fast review. "Finish the integration" as one MR = unreviewed. Subtask branch โ†’ feature/vivo_main โ†’ master via QA only.

S9

Merge + Ledger Update

Commit SHA logged, branch marked done, next slice starts. The ledger is always current. If you can't read the ledger in two minutes, the work has drifted.

Contract-First: What It Replaced

54
Constraints
Derived automatically from the OpenAPI spec. No human writes these.
155
Named test assertions
Traced back to spec section. Each one has a source, not a guess.
39
Error codes
Enumerated from spec, not discovered in production.
<10s
Per slice
Time to generate a complete contract for any new integration slice.

Agents work better with guardrails, not steps.

Step-by-step instructions break the moment reality diverges from the script. Guardrails define the boundaries โ€” the agent finds its own path inside them. This is what made the Vivo integration survivable across weeks and five concurrent branches.

Agents Work Better With Guardrails, Not Steps

Six principles. All earned the hard way.

01

Slice work into narrow branches and flows

"Finish the integration" is not a task. feature/vivo_debit, feature/vivo_credit, status API, wallet routes โ€” each tracked separately with a known branch and expected output. The agent makes progress on a slice; it can't make progress on a vague goal.

โ†’ Story 01
02

Keep a visible ledger

At any point: pushed branches, commit SHAs where known, not-started items, blockers, next watch item. If you can't state the ledger in two minutes, the work has drifted.

โ†’ All stories
03

Gate claims with evidence

"Green CI" was not accepted until the artifact proved the Vivo test actually ran. IntegrationCasino.Tests.dll absent from the TRX = not done, regardless of the pipeline icon.

โ†’ Story 02
04

Correct assumptions early

BetSoft numeric gameId was the right reference โ€” not AleaPlay. One correction at design time prevented the wrong pattern from spreading across multiple files and stages.

โ†’ Story 01
05

Use short walkthroughs for internal tools

For BackOffice or browser-based flows, a short video showing login, menu path, fields, and expected result beats asking the agent to infer the workflow from a text description.

โ†’ Lesson: 2026-07-01
06

Tico as orchestrator works

Prateek holds the human gate. Koda does implementation slices and surfaces evidence. Tico keeps state clean and routes between them. This model held up across weeks and five concurrent branches.

โ†’ Story 03

Builder โ†’ Orchestrator โ†’ Human Gate.

How the Vivo integration actually ran

Builder
๐Ÿป Koda
Implementation slices + evidence
โ†’
Orchestrator
๐ŸŒด Tico
State, routing, ledger
โ†’
Human Gate
๐Ÿ‘ค Prateek
Approval + correction
๐Ÿ

The winning pattern

Narrow task, known branch, source docs, expected evidence, frequent correction โ€” and no "complete" claim until proof exists.