Skip to content

docs: the register covers every account, and counts itself - #213

Merged
productdevbook merged 2 commits into
mainfrom
docs/register-covers-every-account
Aug 20, 2026
Merged

docs: the register covers every account, and counts itself#213
productdevbook merged 2 commits into
mainfrom
docs/register-covers-every-account

Conversation

@productdevbook

Copy link
Copy Markdown
Owner

Closes #198.

CLAUDE.md says "The whole list is UNVERIFIED.md". It was not: grep -ci paypal UNVERIFIED.md returned 0, and so did stripe — while both crates carried their readings in prose, where kasapay-verify's work list cannot see them. A verification run would never have planned a PayPal call.

PayPal is now section F

Five entries, ordered the way sandbox-verification asks: retry safety first.

F1 is the most expensive entry in the file. PayPal documents that an omitted refund amount refunds captured minus previous refunds, computed when the request is processed. They separately document that a repeated PayPal-Request-Id answers the cached response rather than processing again. Which one wins when a caller retries an omitted-amount refund after another refund landed in between is documented nowhere — and the wrong reading is money out twice, from an ordinary retry loop.

F2–F5: the status-resolution order, 403 reading as Auth, the account-level default return_url/cancel_url, and four calls that use documented shapes but have never been made against a sandbox — separate_capture: true rests on them.

Two iyzico readings the register did not carry

A10. /payment/preauth is sent a tokenised paymentCard. The specs give that path PaymentCard, which requires five card fields and defines neither token field, while /payment/auth is documented with PaymentCardSaved, which defines both. That is not spec silence — it is a different schema, and every hold this crate can take goes through it. A7 and A8 rest on it too.

A11. Provider::capture with no amount captures whatever /payment/detail calls "Total collected amount" — which for a hold nobody has captured plausibly reads zero. Settles alongside A8 in the same pre-authorisation.

Filing

B3 is a PayTR entry and it sat inside section C, "A Terminal API merchant agreement and a Pavo device". So somebody with a PayTR merchant account worked section B, found two entries, and never reached the one that blocks eleven operations.

It says eleven now. Its own breakdown is five plus four plus two, and it said nine — specs/paytr/latest.yaml documents exactly eleven matching pages per language. Same correction in kasapay-paytr's lib.rs.

The file claims "Each entry names the issue it came from, so the argument that produced it is still readable." Three did not; B3 said "— new". Found with git log -S and named: #148, #134, #161.

D4 sat between D1 and D2, left there by the change that added it.

And the counts

sandbox-verification and kasapay-verify both said "eighteen". That was right when written; the file now has 28, ten of them from this change alone. They say grep -c '^### ' UNVERIFIED.md instead — which is what this repository does everywhere else it counts something, and precisely the lesson kasapay-specs owns.

CI decides.

productdevbook and others added 2 commits August 20, 2026 11:10
CLAUDE.md says "the whole list is UNVERIFIED.md". It was not: `grep -ci paypal`
returned nothing, and neither did stripe, while both crates carried their
readings in prose where kasapay-verify's work list cannot see them. A
verification run would never have planned a PayPal call.

PayPal's five are now section F, ordered the way sandbox-verification asks —
retry safety first. F1 is the most expensive entry in the file: PayPal
documents that an omitted refund amount is computed when the request is
processed, and separately that a repeated `PayPal-Request-Id` answers the
cached response. Which wins when a caller retries an omitted-amount refund
after another refund landed in between is documented nowhere, and the wrong
reading is money out twice from an ordinary retry loop.

Two iyzico readings the register did not carry, both from the same audit. A10:
`/payment/preauth` is sent a tokenised `paymentCard`, and the specs give that
path `PaymentCard`, which requires five card fields and defines neither token
field — not spec silence but a different schema, and every hold this crate can
take goes through it. A11: `Provider::capture` with no amount captures whatever
`/payment/detail` calls "Total collected amount", which for an uncaptured hold
plausibly reads zero.

Filing. B3 is a PayTR entry and sat inside section C, "A Terminal API merchant
agreement and a Pavo device" — so somebody with a PayTR account worked section
B, found two entries, and never reached the one that blocks eleven operations.
It says eleven now: its own breakdown is five plus four plus two, and it said
nine. The same in kasapay-paytr's lib.rs.

The file claims each entry names the issue it came from. Three did not; B3 said
"— new". Found with `git log -S` and named.

D4 sat between D1 and D2, from the change that added it.

And the counts. sandbox-verification and kasapay-verify both said "eighteen",
which was right when written and is now 28 — this change alone added ten. They
say `grep -c '^### ' UNVERIFIED.md` instead, which is what this repository does
everywhere else it counts something.

Closes #198

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The previous commit's message claimed this was included and it was not. Five
card-vault calls plus the Link API's four plus the Havale/EFT iframe's two is
eleven; specs/paytr/latest.yaml documents exactly that many matching pages per
language.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@productdevbook, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 7 minutes

Limit details: You’ve used all 10 included reviews currently available.

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8427dce4-ffee-4319-93df-36bf66a04713

📥 Commits

Reviewing files that changed from the base of the PR and between 7751709 and 768c124.

📒 Files selected for processing (4)
  • .claude/agents/kasapay-verify.md
  • .claude/skills/sandbox-verification/SKILL.md
  • UNVERIFIED.md
  • crates/kasapay-paytr/src/lib.rs

Comment @coderabbitai help to get the list of available commands.

@productdevbook
productdevbook merged commit ee8ee4d into main Aug 20, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs: UNVERIFIED.md is missing three of the accounts it claims to be the whole list for

1 participant