Vision: a finished conversation, not a coin

Authority: DOCTRINE.md. PegLab is not a dollar. KaChat is not a PC app. Kaspa is not a bank.

The job is still real: two people agree on a number, then one of them gets paid. If they agreed EUR, a euro rail is the honest finish — not a Kaspa fake dollar. If they agreed KAS, timeout pay on KAS is enough. Do not kidnap an invoice into tPEG. The whole scheme: WHOLE.md.

This file is the product vision and the to-do for *everything around the chain*: phones, copy, postage, identity, law, ops, education, other apps. The chain is the court. It is not the product.

Related: IDEA.md (what this lab is), KACHAT.md (chat + pay), STABLES-GUIDE.md (capital and pegs), MAINNET.md (other-chain PoCs, funding, what mainnet would take). This file does not replace those. It says what “done” looks like for a human.

TESTNET-10 LAB. NOT USD. DO NOT RAISE MONEY AGAINST tPEG.


1. The scene that has to work

A client and a designer are already talking in KaChat on their phones.

  1. Someone types a quote: twenty units for the logo, timeout 48 hours.
  2. The other person taps Pay. The number on the button is the number they agreed. It does not move with KAS while they argue.
  3. If they claim, the unit unlocks to them. If they ghost, the sender reclaims after the timeout.
  4. Neither person opened a PC. Neither bought USDT on another chain. Neither was told “go get KAS dust first” as the first screen.
  5. If the unit is a KAS receipt, the UI says it is locked sompi, not dollars. If a named USD exists later, that is a different asset with a named issuer. Today’s tPEG never appears as $.

If that scene fails, the covenant is trivia. If that scene works, invoices, tips, splits, chess stakes, and agent 402s are the same object in a different thread.

KaChat does not support PC. The PegLab site on a desktop is the teaching bench. Settlement happens in the pocket.


2. What is true today (so the vision is not a pitch)

LayerTodayGap
ConversationKaChat E2E chat + native KAS pay on iOS and AndroidQuote still dies when KAS moves
Desktop chatNone. This site says so.Do not fake a web KaChat
UnitPegLab tPEG: tiny TN10 pool, admin oracle, will depeg as USDMust not be listed in KaChat 4.x as money
Lab UILocal http://127.0.0.1:8765/ and public .club, KasWare or host-funded local walletLive on-chain series + indexer row still the next real step
IdentityKNS names; aliases are not uniquenessWallets must verify series/genesis, not the word “tPEG”
PostageEvery message and pay burns KAS massReceiver-with-zero-KAS is dead UX
LawNo issuer, no raise, no token saleSaying “dollar” without reserves is the bug
TrustWILL DEPEG banner, depeg lab, this copyOne removed banner and the project becomes a lie

3. North star (beyond the blockchain)

Kaspa dapps run on Kaspa rules. Lock, timeout, redeem, split. People talk in a mobile messenger they already have. The unit in the pay button is either:

The blockchain records the court file. Everything else is how a person reaches that file without getting lost:

When a real licensed dollar exists on Kaspa, this stack hosts it. It does not compete by printing a thinner copy.


4. Workstreams (everything that is not “write another covenant”)

People and surfaces

Conversation (the product)

Settlement (the court)

Postage (the stamp)

Identity and names

Trust and copy

Legal and capital

Distribution

Operations

Education (civic, not marketing)

Ecosystem (after the scene works once)


5. Detailed to-do

Checkboxes are work, not slogans. “Done when” is the test. Strike nothing that is still a lab.

Phase 0 — This lab (PegLab repo)

Phase 1 — Honesty and handoff (days, not a raise)

Done when a stranger on a PC understands they cannot chat here, and a stranger on a phone can open KaChat without a tutorial.

ItemDone when
PC copyDesktop shows KaChat is mobile-only; no fake “Open” to kachat.org
Phone deep linkInstalled app opens; missing app → App Store / Play
QR to phonePC visitor can scan into the same public URL — landing and KaChat pages
Store truthApp Store id and Play package stay in KACHAT.md
No seed in UIPage never asks; mainnet kaspa: refused

Phase 2 — A real Testnet-10 receipt (not a dollar)

Done when an explorer and a second wallet agree on one series balance.

ItemDone when
Genesis on TN10Outpoint, template hash, series bytes published
Transfer + redeemNode accepts; not only src/engine.mjs
No USD oracle on this assetReceipt = sompi. Admin price stays on the depeg toy only
IndexerAddress → UNIT UTXOs visible to KaChat’s stack or a documented indexer
Wallet verifyUnknown series rejected. Ticker is not funds
Caps publishedBacking cap, supply cap, dust — same as the lab, named in UI

Phase 3 — The scene in KaChat (testnet)

Done when two phones complete quote → pay → claim *or* timeout reclaim, once.

ItemDone when
Sign from KaChatiOS (and Android) wallet signs covenant spend. KasWare-on-the-web is not enough
Balance rowUNIT next to KAS, with “not USD” on receipts
Protocolkchat:1:pay stays KAS. Add kchat:1:payunit (series, amount, timeout, memo)
TimeoutSame idea as KaChatPayTimeout.sil
PostagePay succeeds if the receiver has 0 KAS (sponsor or grams)
CopyNo $ on tPEG. Child Mode: receipts/KAS only
Failure copyFive reasons in-thread: stale, postage, unknown series, paused, timeout

Do not wait for Circle to ship timeout-KAS pay. That can go live on KAS now.

Phase 4 — More than two people

ItemDone when
SplitGroup invoice; each pays or one pays and others settle
TipOne-tap unit to an address in the thread
StakeChess / wager: lock, release to winner, or refund
Broadcast / KaPostsOptional tip on a post; still receipts, still not USD

Phase 5 — Agents and merchants

ItemDone when
Bot quoteAgent posts amount + timeout; human pays in KaChat
402Pay button is the unit; postage sponsored
Merchant invoiceLink/QR opens KaChat on a phone with amount filled
Display FXIf they *think* in USD and *pay* a receipt, banner says so

Phase 6 — Mainnet receipt only

ItemDone when
Audit-lite + KaChat reviewKNOWN-BREAKS and AUDIT-LITE closed or accepted
Mainnet seriesReceipt (A) only. Still not called USD
Freeze storyReceipts have no issuer freeze. If we later host USD, freeze is *their* power and the UI says who

Phase 7 — Named USD, if it exists

ItemDone when
Issuer namedCircle / Tether / licensed entity in the first sentence
PegLab not the issuerSeparate asset id. No “tPEG = USDC”
Company pathOnly if someone actually incorporates and banks. Not this repo

Never


6. Order of work (so we do not skip the human)

Lab honesty (done) 
  → phone open / PC refusal / desktop QR (done)
  → live TN10 CONTROL genesis (done; receipt + indexer still next)
  → live TN10 receipt + indexer
  → KaChat signs it on testnet
  → timeout pay in a 1:1 thread
  → postage so zero-KAS receivers work
  → groups / tips / stakes
  → agents / merchant QR
  → mainnet receipt after review
  → named USD only if an issuer is on Kaspa

Skipping to “mainnet chat-pay with a dollar glyph” is how a bridge IOU gets minted.


7. How to use this file

Short version: The chain settles. The phone is where people live. The unit must stay still for the length of a conversation. A toy dollar is a lesson. A receipt is a product. A licensed USD is a company. Do not mix the three.