Rizqey Labs ← rizqey.com
Deep dive · September 2026

Tiba paid five test claims, then we closed six security holes

One payout engine, rewritten three times. It pays a person for finished work only after a bill matches the payer's own record, and it leaves a public receipt either way. No real money has moved.

All times are Malaysia time.

5Test payouts, live site
6Security issues closed
20/20Clean payouts paid
10/10Tampered claims refused
1stof 13 · 23 Aug 300USDC prize 0false refusals ~13 sper decision 46/46tests 19security fixes · 27 Sep 15connection cap hit · 28 Sep
01 · The product

What it is

Tiba is for a program that pays people for finished work: a bounty, a grant, a contributor payment. An agent can file the payment. Tiba reads the bill, reads the program's own record of what was owed, and pays only when those two readings name the same job and the same amount. The amount that goes out is the amount on the record, never the amount on the bill. If they do not match, it refuses. Paid or refused, anyone can open the receipt.

Filed

an agent

The bill

reading one

The payer's record

reading two · never shown the bill

Same job, same amount?

no match · refused

Paid or refused

amount from the record · public receipt

It runs on a practice copy of Solana, a public blockchain. The coins are test USDC, a digital dollar that is not real money.

Test USDC · no real money

Next ↓Why it exists

02 · Why

Why it exists

Automation includes: Council ↓, Strata ↓, Claude Code ↓

24 Aug

meThe first shape

On 24 August I told Claude Code what I thought Tiba should become. DoorDash, Grab and Lalamove would plug in an API so workers could withdraw earnings in crypto. I asked Strata to research it and Council, a panel of models, to grade the call.

24 Aug

councilNone of the eight defended it

That morning, none of the eight judges defended that shape. Seven picked cross-border payouts for migrant workers instead, and the eighth a blend. Those apps already pay quickly in normal money. Nobody local had asked to be paid in crypto. Strata's research also tried to break the idea. The replacement was cross-border payouts through licensed partners. The pitch that software pays one person came on 27 August.

01
Judges
8
02
Defended the first shape
0
03
Picked cross-border payouts
7
04
Picked a blend
1

Council, 24 August.

28 Aug

meThe fence

By 28 August the line I had settled was this. A machine pays a person, and no human approves each transfer. Cross-border payouts were dropped. The product was the fence: caps, a list of who can be paid, and a switch that stops everything.

6 Sep

meA wallet

On 6 September I looked at the site and said what I actually thought.

What are we really?6 Sep 2026, 6:51am4 lines
[6 Sep 2026, 6:51am] FARIS: The average user has NO IDEA what Tiba is. And my 2 teammates have proven that.
We need to become more like what we are.
What are we really?
If we are a wallet just bloody say that u clown.

Claude Code changed the first sentence within minutes. Tiba is a wallet for software. It pays people on your behalf, within your limits, and only after two checks agree.

13 Sep

meThrown out

A week later I threw that rule out.

AI Slop13 Sep 2026, 5:17pm2 lines
[13 Sep 2026, 5:17pm] FARIS: This sounds like an AI Slop idea.
I always HAVE thought that this part of Tiba was always an AI Slop idea for an Agent with no grasp of the physical world.

Council's pick that evening was a different product, and the wallet was on the kill list.

25 Sep

researchThe check, in the empty pile

On 25 September a research pass put the wallet back in the crowded pile and the check in the empty one. It read 1,916 YC company sites and compared 18 rivals from their own pages. Coinbase, Stripe and Squads already sell an agent a spending limit. Of those 18, only one mentions checking an invoice, and a person still approves. None of the 17 that could be checked gives a receipt for a refusal. I said yes. The site now leads with the check before an agent's payment goes out.

1,916YC company sites 18rivals compared 1mentions an invoice 17checked · none with a refusal receipt

Next ↓The best runs

03 · Five runs

The best runs

23 August. First place

1stof 13 300USDC 3recipients 7transfer instructions 648bytes · one transaction 200USDG coding grant

Automation includes: Claude Code ↓

The first Tiba was a batch payroll tool. An employer uploaded a list. One Solana transaction paid every worker in test USDC, or it paid none of them. An agent could also pay from a list approved once, with a key the machine held, and no one clicked each transfer. I built it solo across 22 and 23 August. The demo was usetiba.vercel.app.

Verified on the practice network: 3 recipients, 7 transfer instructions, one 648-byte transaction. No real money, and no users yet.

Claude Code found the result that evening.

The result23 Aug 2026, 8:14pm1 line
[23 Aug 2026, 8:14pm] CLAUDE: Tiba already won 1st place today (300 USDC) at Superteam Malaysia's Solana Lab hackathon — it's a real Solana product (atomic USDC batch payroll, devnet, machine-held key, …).

Thirteen submissions. The saved note says what won: a live demo that worked, Solana doing real work, an honest description, and proof links that matched the chain. A separate coding grant, 200 USDG, was approved on 27 August.

29 to 30 August. Twenty clean payments, ten attacks, no stylesheet

20/20legitimate payouts paid 10/10tampered claims refused 0false refusals ~13 sper decision 37commits

Automation includes: Claude Code ↓

The next hackathon needed a different product, so the old repo stayed behind. A fresh repo got its first commit on 29 August at 8:23am. Nothing was copied across. One reading looks at the bill. The other looks at the payer's own record and is never shown the bill. If they disagree, the payment is refused. There is no vote.

By about 1:30am on 30 August the pipeline had been run against the live site, not a laptop.

First live run30 Aug 2026, 1:26am2 lines
[30 Aug 2026, 1:26am] CLAUDE: Adversarial artifact → RED `QUORUM_SPLIT`, receipt live at `/r/acf6353a-86b2-4860-b7da-c59285b4490a`
Clean artifact → PAID 0.002 SUI, digest `2BLvd6pGqgsyMbnoDXNzoJyWezTChr2qjLBCL5LoAsV2`, receipt at `/r/daf3a5db-fd73-4fcc-b64f-2ae404525184`

The number written into the submission on 5 September: 20 of 20 legitimate payouts paid, 10 of 10 tampered claims refused, 0 false refusals, about 13 seconds per decision. A single reading had been paying the attacks. Two readings refused all 10, with 0 of 20 false refusals. Decisions had been taking 33 to 50 seconds. Sending each reading to two models at once and taking the first good answer cut a refusal to about 7 seconds and a clean payment to about 16.

01
Before · slowest
50 s
02
Before · fastest
33 s
03
Clean payment · after
~16 s
04
Submitted · mean
~13 s
05
Refusal · after
~7 s

Seconds per decision.

The public URL was https://tiba-omega.vercel.app. Thirty-seven commits. That afternoon Claude Code opened the page.

No stylesheet30 Aug 2026, 2:34pm1 line
[30 Aug 2026, 2:34pm] CLAUDE: the entire app had shipped with no CSS. Tailwind 4 needs a PostCSS plugin nobody had added, so every page was plain serif text. All the curl checks said 200 because routing worked; nobody had looked at a rendered page.

Fixed and redeployed that afternoon.

2 September. The demo order that died after one payment

25/25tests 1×WO-13 on the live site

Automation includes: Claude Code ↓

A judge walkthrough on a preview paid a demo order, WO-13, then left it open so the next person could pay it again. Before the fix, the second attempt was a refusal. Claude Code ran the walkthrough twice.

The walkthrough, twice2 Sep 2026, 5:37pm4 lines
[2 Sep 2026, 5:37pm] CLAUDE: Judge 1 pays WO-13 | PAID, digest `EXDNN8aj…`
WO-13 after | open ← this is the bug, fixed
Judge 2 pays WO-13 | PAID, digest `GaUgpiPG…` ← previously a refusal
Inflated 50.00 note | REFUSED `QUORUM_SPLIT:amount_micros`, no digest

25 of 25 tests passed. Only that demo order could refill, a refusal never refilled it, and a failed refill could not undo a payment that had already settled.

The fix stayed on the preview. On 5 September the last live deploy was still 1 September. The live site could pay WO-13 exactly once. A second run, in rehearsal or in front of a judge, would miss.

Preview

WO-13 refills

fixed · 2 Sep

Live site

pays WO-13 exactly once

last deploy · 1 Sep

That same build was submitted to MUBA, a university hackathon. Tiba did not win. In the payments track, another entry, Splash, beat it. Splash had one route, one buyer, named partners, and a rule that a person still signs.

13 to 15 September. Five receipts, then six holes closed

5test payouts 6public issues 46/46tests 0.01USDC paid example

Automation includes: Codex ↓, NightShift ↓, Claude Code ↓

Sui, the chain used for that hackathon, was still in the product. On 11 September I told Claude to put the live product back on Solana. Sui had only been there because that event had no Solana track.

On 13 September Codex took Sui out, wrote a threat model, and shipped both. NightShift, the overnight runner, then sent five test payouts through the live site.

Five payouts13 Sep 2026, 9:57am1 line
[13 Sep 2026, 9:57am] CLAUDE: 5 devnet payouts went through live Tiba. All 5 public receipts load, and one checked on-chain came back PASS.

The same morning a security review landed: 0 critical, 2 high, 4 medium. One high was fixed, so one workspace could no longer see another's data. The other high was an old hosting token, already expired. Six public issues were opened.

0Critical
2High
4Medium

On 15 September a second agent tried to break the fixes. 44 tests passed, then 46 of 46. I said yes. The first automatic check failed on a missing package, then the release went through.

The security release15 Sep 2026, 7:12pm1 line
[15 Sep 2026, 7:12pm] CLAUDE: The security release is live on tiba.rizqey.com. All 6 security issues on the grant repo are closed. I checked it from outside: the pages load, your headline, "A real example" and the eval label are still there, and the demo wallet now shows as read-only.

One of those five payouts is still the paid example. 0.01 USDC on Solana's test network. Transaction 5NbsG6hT…. Receipt /r/8ecd74ca-ef81-4d60-b642-a9a1e8ece93c.

tiba.rizqey.com/r/8ecd74ca-ef81-4d60-b642-a9a1e8ece93c
Tiba receipt page headed Paid: 0.01 USDC paid on Solana devnet to Solana Test. A table shows check 1 and check 2 with the same answer, both checks agreed, limits passed, identity check not required, and the payment with its Solana devnet transaction link.
Fig 1. The paid example receipt: 0.01 USDC on Solana devnet, both checks agreed, the limits passed, and the devnet transaction. Live, captured 28 Sep 2026.

26 to 27 September. A stranger can try to fool it

0.01pathUSD · Tempo 0.001TAZ · Zcash 50checks on the wall 480.00USDC refused 19security fixes 6follow-ups

Automation includes: Cursor ↓, Claude Code ↓, Head Dev ↓

Cursor, on its own machines, sent one test payment on Tempo (0.01 pathUSD, a test stablecoin on a payments chain built by Stripe and Paradigm) and one private test payment on Zcash (0.001 TAZ, readable again with a viewing key). Solana failed on that machine. The test-coin faucet refused the airdrop, and the USDC faucet wanted a captcha. The receipt page also called every coin USDC.

On 26 September six builds were merged and I said yes. Claude Code then tried to fool the live site.

Try to fool it26 Sep 2026, 8:55pm1 line
[26 Sep 2026, 8:55pm] 'Try to fool it': a wrong bill was refused in seconds with a real signed receipt showing the bill, the record and the mismatch, and naming the makers (OpenAI read the bill, Alibaba read the record); a matching bill says 'would pay, nothing sent'. The Refusal Wall shows 49 checks, 23 paid, 9 refused.
tiba.rizqey.com/try
Tiba try page titled Try to fool it. Left, the payer's record, which cannot be edited: work order WO-TRY-FOOL-1, approved 1.00 USDC, delivery verified complete, sandbox payee. Right, an editable bill with work order WO-FAKE-999 and amount 9.00 USDC, a Try to fool it button and a Submit the matching bill link.
Fig 2. The try page: the payer's record for work order WO-TRY-FOOL-1 at 1.00 USDC, next to a bill you can edit (here WO-FAKE-999 at 9.00 USDC) and the “Try to fool it” button. Sandbox, no money sent. Live, captured 28 Sep 2026.

A changed work-order number sometimes came back blank. The wall's refused total read 0.00 because older refusals had asked for nothing. A sandbox receipt showed a spending line that meant nothing there. I said go. By about 9:35pm the wall showed 50 checks, 10 refused, and 480.00 USDC refused, counting only the refusal that had asked for money.

The next day a new security pass found worse holes, already on the live site. Nineteen fixes shipped at about 9:37pm, plus six follow-ups from the Head Dev.

hole27 Sep

A repeat call could make the treasury sign again for any amount.

hole27 Sep

A retry could pay the same invoice twice.

hole27 Sep

On a bounty, the payer's record was copied from the claimant's own ask and the bounty never closed.

hole27 Sep

The public wall loaded every workspace's receipts.

checked27 Sep

After the deploy, a payment request with no key was refused.

Next ↓What worked

04 · The numbers

What worked

20/20

The hackathon and the eval

First of 13, 23 August, 300 USDC, in a verified batch of 3 recipients and one 648-byte transaction. The 5 September number: 20 of 20 clean payouts paid, 10 of 10 tampered claims refused, 0 false refusals, about 13 seconds a decision, plus one live payment of 0.002 test SUI.

46/46

Live payouts and the security release

Five Solana test payouts on 13 September, 0.01 USDC each, all five receipts loaded, one checked on the chain. All 6 grant-repo issues closed on 15 September, 46 of 46 tests, demo wallet still public and read-only. The 200 USDG coding grant was approved on 27 August.

19

Research, the wall, and the fixes

The 25 September research also counted 1,889 summaries checked against the page, 36 direct rivals, 92 more beside payments, and 5,428 past Solana hackathon projects. On 26 September the wall, after the polish, showed 50 checks and 480.00 USDC refused in test money. On 27 September, 19 security fixes and 6 follow-ups went live.

Next ↓What broke

05 · Failures

What broke

broke30 Aug

No stylesheet

The first public deploy of the new repo had no stylesheet. Every page was unstyled text. The checks only asked whether the server answered. They got 200. It stayed that way for about 13 hours.

stale2–5 Sep

WO-13, fixed only on the preview

The WO-13 fix was proven on 2 September and was still only on the preview on 5 September, four days after the last live deploy.

down6 Sep

Production could not pay

On 6 September, before I looked at onboarding, production could not pay. Claude Code found it by sending a real test payment. The model wrote its reasoning before the answer and used up the space the answer needed. Both checks failed. Every payment was held.

The fix shipped the same day: a test payment settled, digest 2fZ3m9DsvqUBFv3f8xFMdjF8hsTzgr, at 12:03pm.

wrong6 Sep

The homepage was the app

I then tested a new account myself.

A new account6 Sep 2026, 2:18pm1 line
[6 Sep 2026, 2:18pm] FARIS: wtf man. I just checked and it takes me straight to the app.

The marketing page had been moved off the root and the product left on it. There was no sign-in. A new workspace showed two keys once. Lose them and the workspace was gone. New signups still paid from one shared test wallet, so the cap was lowered so a stranger could not empty it during a demo.

overclaimto 27 Sep

Two “independent” checks, same models

Both "independent" checks used the same models. The site still said two checks must agree. The first homepage rewrite then claimed zero of 18 rivals read the bill. The research did not say that. One of the 18 mentions an invoice, and a person still approves. That line had to be stripped from the site before anything went live. On 27 September the claim died again. Solply, a public hackathon entry, already refuses a wrong bill for one supply chain. The live copy now says of the 18 compared on 25 September, none offered both a bill check and a public receipt for a refusal.

missed8 Sep

MUBA, and a form never sent

MUBA did not win. The identity check built for a Terminal 3 night was real. The form was never sent. An agent had marked it submitted.

T39 Sep 20261 line
[9 Sep 2026] FARIS: Oya I bloody forgot to submit T3.

The deadline had passed on 8 September at 8:00pm.

missed25 Sep

A demo video with no file

A demo video was marked done on 25 September with no file behind it.

blocked24 Aug · 26 Sep

No test coins, killed sessions

Cursor never sent the Solana test payment, because that machine could not get test coins. On 24 August, Codex and then Devin were killed three times when sessions restarted.

down28 Sep

15 connections

Early on 28 September the database hit its cap of 15 connections. A rebuild failed. The live site still answered.

I said yes to the fix, and it was live by about 2:00am.

rolled back28 Sep

Plain rules held a mismatched bill

The same night a replacement for the record check, plain rules instead of a model, was put live and held a mismatched bill instead of refusing it.

Rolled back within minutes. The same bill then refused correctly.

open28 Sep

The record check sometimes returns nothing

A separate fault is still open: the record check sometimes returns no answer, so a correct bill can be held instead of paid.

Next ↓What we learned

06 · Eight rules

What we learned

01
A server answering 200 is not a page. After the missing stylesheet, the rule is to open the rendered page. Routing checks do not count.
From: the missing stylesheet, 30 Aug
02
A fix on a preview is not a fix. WO-13 was proven, tested, and invisible on the URL a judge already had.
From: WO-13, 2–5 Sep
03
Say the check the way the code does it. The site said two independent checks while both readings called the same models. The receipt now names which maker read the bill and which read the record.
From: two “independent” checks, same models
04
The record cannot be copied from the bill. The bounty hole did that, and marked the work verified because the claimant said so. The reading that sees the record is not shown the bill. The amount paid comes from the record.
From: the bounty hole, 27 Sep
05
A claim dies when a counterexample shows up. "Nobody else refuses a wrong bill" was false: Solply, a public hackathon entry, already does it for one supply chain. The line we kept is dated: of the 18 compared on 25 September, none had both an automatic bill check and a public refusal receipt.
From: Solply, 27 Sep
06
A task marked done needs the file. The demo video was marked done with nothing delivered. The Terminal 3 form was marked submitted by an agent, and I had not pressed it.
From: the demo video and the Terminal 3 form
07
A chain added for one deadline comes out when the deadline is over. Sui was still in the product after I had asked why.
From: Sui, 11–13 Sep
08
Test the path you tell someone else to use. I was the one who found that the homepage was the app. An outside team will not get a walkthrough, which is why the quickstart exists.
From: the homepage that was the app, 6 Sep

Next ↓Where it stands

07 · Today

Where it stands

Tiba is live at tiba.rizqey.com. I checked the page while writing this. It loads. The headline is the check before an agent's payment goes out. The refused example is work order WO-R2 at 1.3 USDC against a record of 1.00 USDC. The paid example is 0.01 USDC on Solana's test network, with a public receipt. The eval figures are still labelled as an earlier build from 29 August: 20 of 20 honest notes paid, 10 of 10 tampered notes refused, 0 of 20 false refusals, 13 seconds mean.

tiba.rizqey.com
Tiba homepage on desktop. Headline: The check that runs before your AI agents pay someone. Two paragraphs on the two checks, buttons for See it refuse a bad bill, Try it, Every check, Quickstart and Sign in, and the top of A real example with a refused card for work order WO-R2 at 1.3 USDC and a paid card for 0.01 USDC on Solana devnet.
Desktop. The headline, the two checks, the buttons, and the top of “A real example”: WO-R2 refused at 1.3 USDC, 0.01 USDC paid.
Tiba homepage on a phone. Headline: The check that runs before your software pay someone, followed by the two paragraphs on the checks and the buttons.
Phone. The headline word rotates; here it reads “software”.

The Tiba homepage, live, both captured 28 Sep 2026.

Solana is the rail that is on. Tempo and Zcash are built, tested, and switched off. The bounty page, the refusal wall, and the try page are on the same site. The 15-connection cap is fixed. The plain-rules record check is not live. The model that reads the record still sometimes returns nothing, and a correct bill is then held.

tiba.rizqey.com/wall
Tiba Refusal Wall titled Every check in the demo, paid or refused. Totals: 60 checks run, 9 paid, 14 simulated with nothing sent, 14 refused, 2121.099998 USDC refused in test money, 12 of 14 asked for money. Below, the latest rows, including two refusals where the bill said 1.3 USDC and the record said 1.00 USDC.
Fig 3. The Refusal Wall, captured 28 Sep 2026: 60 checks run, 9 paid, 14 simulated, 14 refused, then the latest rows. Two of them are refusals where the bill said 1.3 USDC and the record said 1.00 USDC. Row times are in UTC. Live.

Solana

on

Tempo

built · tested · off

Zcash

built · tested · off
fixed15-connection cap not liveplain-rules record check openrecord check returns nothing 0outside-team payouts

No outside team has run a payout through it yet. That is the next test.

Automation includes: Claude Code on the laptop, the Head Dev (Claude in the cloud), Cursor, Devin, Codex, Council, NightShift, Strata, Manus, and Ilmu.

Claude Code

on the laptop

In this entry · 23 Aug, 24 Aug, 30 Aug, 2 Sep, 6 Sep, 13 Sep, 15 Sep, 26 Sep

Head Dev

Claude in the cloud

In this entry · 27 Sep

Cursor

on its own machines

In this entry · 26 Sep

Codex

took Sui out, wrote a threat model

In this entry · 24 Aug, 13 Sep

Council

a panel of models

In this entry · 24 Aug, 13 Sep

NightShift

the overnight runner

In this entry · 13 Sep

Strata

research that also tried to break the idea

In this entry · 24 Aug

Devin

killed three times, with Codex

In this entry · 24 Aug

Latest receipt line in this entry · 26 Sep 2026, 8:55pm

[26 Sep 2026, 8:55pm] 'Try to fool it': a wrong bill was refused in seconds with a real signed receipt showing the bill, the record and the mismatch … The Refusal Wall shows 49 checks, 23 paid, 9 refused.

Last updated 28 September 2026