Skip to content

Audit fixes - #20

Merged
seenu-k merged 9 commits into
mainfrom
audit-fixes
Oct 5, 2026
Merged

seenu-k merged 9 commits into
mainfrom
audit-fixes

Conversation

@seenu-k

@seenu-k seenu-k commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

seenu-k and others added 2 commits October 3, 2026 06:58
Settling up
- The UPI ID handed to a payment app is always the payee's own: a typed one
  is kept with the payee it was typed for and only read back for them.
- Amounts take a comma or a dot as the decimal point and refuse grouping, so
  "12,50" is no longer 1,250; very long amounts are refused instead of
  breaking the screen.
- Nobody pays themselves, and the payee picker clears on screen when the
  payer becomes the payee.
- With "Suggest the fewest payments" off, each pair's own debt is suggested,
  netted both ways, and explained from the expenses they shared.

The expense editor and Settle up keep their state in Riverpod notifiers
holding an immutable form, seeded once and listened to after, so a sync
cannot wipe what is being typed and the logic is tested without widgets.

Leaving a group
- Leaving needs you settled up, as removing somebody else does.
- Somebody who left comes back with a link, to the same place; nobody else
  can bring an account holder back.
- No write may change what a departed member owes, except to settle it.
- Left groups move to the archived list, read-only, and stop syncing once
  the server has confirmed it.

Sign-in
- Attaching an email address or a Google account to an account that has one
  needs a sign-in from the last ten minutes, as deleting it does.

Rates and storage
- The daily rate job keeps the last year complete, fetching any week-long
  gap in one range request; a rate over a week older than a day no longer
  answers for it, on the server or the device.
- Multi-row inserts are split to fit 100 bound values a statement, so an
  expense among 26 or more people saves instead of being refused forever.

Groups are listed by their newest activity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VUEWUK8dHE137xzXX3zSBu
- Add stale base check for all edits in ledger
- Replace separate activity table with lastActivityAt column on meta
- Implement integer profile version counters in D1
- Replace per-group sync endpoints with batched POST /sync
- Implement cross-group ID collision guard on client
- Optimize partial syncs to pull only affected groups and exchange rates
- Add local database secondary indexes
- Use PRAGMA data_version to detect background handler writes
- Replace outbox timestamps with position ordering
@seenu-k seenu-k self-assigned this Oct 4, 2026
- Removed fallback default values for schema migrations
- Created single pristine generated migrations for D1 and DOs
- Simplified DO upkeep logic assuming fresh deployment
- Deleted all old migration files since this is early dev
@seenu-k
seenu-k merged commit 335c1f9 into main Oct 5, 2026
4 checks passed
@seenu-k
seenu-k deleted the audit-fixes branch October 5, 2026 06:57
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.

1 participant