Domain NFR defaults
Generic SDS “big four” live in Method. This page is the loan-market amendment.
| NFR | Typical consumer app | This domain |
|---|---|---|
| Availability | Stale feed > error | Unavailable vote > wrong vote for submit |
| Scalability | 100M users | Fewer users, huge correctness / audit / multi-tenant blast radius |
| Latency | <500ms reads | Grids must feel instant on entitled data; ingest can lag if the UI is honest |
| Consistency | Eventual OK | Strong where money/positions/entitlements move; eventual OK for “notice arrived, processing” if labeled |
CAP in bank English: stale position vs unavailable vote. Positions, entitlements, vote submit = CP. “Live progress dashboard” can be AP if it says it is approximate.
Cache amendment: the read path for a position used to vote or reconcile cannot be “whatever is in Redis.” Cache is behind “this is settled from the agent.” Show as_of / sync state.
Load shaping: don’t onboard three agent banks’ full history the same weekend as a voting deadline.
Sagas: no distributed ACID across agent-feed, your platform, and a lender’s book. Vote: validate entitlement → snapshot settled position → accept vote → emit downstream. If snapshot fails, do not accept the vote.
Extra boxes: idempotency, outbox, sagas, row-level authz, audit log, DLQ, observability on workers.