ð§ STATE_MACHINES.md - System State Machines (āļāļēāļĢāļēāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āļĢāļ°āļāļ)
This document maps out the state transitions, allowed events, invalid operations, and error recovery paths for key SplitDee domain workflows.
āđāļāļāļŠāļēāļĢāļāļāļąāļāļāļĩāđāđāļŠāļāļāđāļāļāļāļąāļāļŠāļāļēāļāļ° āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āļāļēāļĄāđāļāļ·āđāļāļāđāļ āļāļīāļāļāļĢāļĢāļĄāļāļĩāđāļŦāđāļēāļĄāļāļģ āđāļĨāļ°āđāļāļ§āļāļēāļāđāļāđāđāļāļāļ§āļēāļĄāđāļŠāļĩāļĒāļŦāļēāļĒāļāļēāļāđāļāļāļāļīāļāļŠāļģāļŦāļĢāļąāļāļĢāļ°āļāļāļāļēāļāļŦāļĨāļąāļāļāļāļ SplitDee
ðđð āļ āļēāļĐāļēāđāļāļĒ (āļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļāđāļāļēāļ)
1. āļ§āļāļāļĢāļāļĩāļ§āļīāļāļāļīāļĨāļāđāļēāđāļāđāļāđāļēāļĒ (Bill Lifecycle State Machine)
āļāļīāļāļāļēāļĄāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļāđāļēāļāļŠāļāļēāļāļ°āļāļāļāļāļīāļĨāļāļąāđāļāđāļāđāļĢāļīāđāļĢāļīāđāļĄāļŠāļĢāđāļēāļāļāļāļāļķāļāļāļģāļĢāļ°āđāļāļĨāļĩāļĒāļĢāđāļĒāļāļāļāļĢāļāļāđāļ§āļ:
- āļ āļēāļāļĢāļ§āļĄāļĨāļģāļāļąāļāļŠāļāļēāļāļ°: āļĢāđāļēāļāļāļ (Draft) â āđāļāļīāļāđāļāđāļāļēāļāļāļģāļĢāļ°āđāļāļīāļ (Active) â āļĢāļ°āļŦāļ§āđāļēāļāļāļĢāļ°āļĄāļ§āļĨāļāļĢāļ§āļāļŠāļāļ (Processing) â āļāļģāļĢāļ°āđāļŠāļĢāđāļāļŠāļĄāļāļđāļĢāļāđ (Settled) â āļĨāđāļāļāļāļīāļĨāļāļēāļ§āļĢ (Locked)
- āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āļāļĩāđāļāļāļļāļāļēāļ:
Draft -> ActiveāđāļĄāļ·āđāļāļāļđāđāļŠāļĢāđāļēāļāļāļīāļĨāļāļāļāļļāđāļĄāđāļāļĒāđāļāļĢāđActive -> ProcessingāđāļĄāļ·āđāļāļĨāļđāļāļŦāļāļĩāđāļāļāđāļĢāļāđāļĢāļīāđāļĄāļāļāļāļąāļāđāļŦāļĨāļāļ āļēāļāļŦāļĨāļąāļāļāļēāļāļāļēāļĢāđāļāļāđāļāļīāļāļŠāļĨāļīāļProcessing -> SettledāđāļĄāļ·āđāļāļĢāļ°āļāļāļāļģāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāđāļĨāļ°āļĒāļ·āļāļĒāļąāļāļāđāļēāļāļŠāļĨāļīāļāļāļāļāļŠāļĄāļēāļāļīāļāļāļļāļāļāļāļāļĢāļāļāđāļ§āļSettled -> LockedāļāļīāļĨāļāļ°āļāļđāļāļŠāļąāđāļāļĨāđāļāļāđāļāđāđāļāļāđāļāļĄāļđāļĨāļāļēāļ§āļĢāđāļāļĒāļāļąāļāđāļāļĄāļąāļāļī 7 āļ§āļąāļāļŦāļĨāļąāļāļāļēāļāļāļģāļĢāļ°āļāļĢāļāđāļĨāđāļ§
- āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āļāļĩāđāđāļĄāđāļāļāļļāļāļēāļ:
Active -> Draft(āđāļāļĒāđāļāļĢāđāđāļĨāđāļ§āļĒāđāļāļāļāļĨāļąāļāđāļāđāļāđāđāļāđāļāļāļąāđāļāļĢāđāļēāļāđāļĄāđāđāļāđ)Settled -> Active(āļāļģāļĢāļ°āļŦāļāļĩāđāļāļĢāļāļāđāļ§āļāđāļĨāđāļ§ āļŠāļąāđāļāđāļāļīāļāđāļāļĨāļĩāļĒāļĢāđāđāļŦāļĄāđāđāļĄāđāđāļāđ)
- āđāļāļ§āļāļēāļāļāļđāđāļŠāļāļēāļāļ°: āļŦāļēāļāļāļēāļĢāđāļāđāļāļŠāļĨāļīāļāļāļđāļāļāļāļīāđāļŠāļ (āđāļāđāļ āļŠāļĨāļīāļāļāļĨāļāļĄāļŦāļĢāļ·āļāļĒāļāļāđāļāļīāļāđāļĄāđāļāļĢāļ) āļĒāļāļāļŦāļāļĩāđāļāļāļāļāļāļāļąāđāļāļāļ°āļāļĩāļāļāļĨāļąāļāđāļāđāļāđāļāļĢāļāļāļģāļĢāļ°
Activeāļāļąāļāļāļĩāđāļāļ·āđāļāđāļŦāđāļāļģāļĢāļēāļĒāļāļēāļĢāđāļāļāļŠāđāļāļāđāļŦāļĄāđ
2. āļŠāļāļēāļāļ°āļāļĢāļ§āļāļŠāļāļāļŠāļĨāļīāļāļāļāļēāļāļēāļĢ (Payment Verification State Machine)
āļāļ§āļāļāļļāļĄāļŠāļāļēāļāļ°āļāļēāļĢāđāļŠāļāļāļāļīāļ§āļāļēāļĢāđāđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļāļŠāļĨāļīāļāđāļāļāđāļāļīāļāļāļāļēāļāļēāļĢ:
- āļ āļēāļāļĢāļ§āļĄāļĨāļģāļāļąāļāļŠāļāļēāļāļ°: āļāļąāļāđāļŦāļĨāļāļŦāļĨāļąāļāļāļēāļ (Pending) â āļāļģāļĨāļąāļāļāļĢāļ§āļāļŠāđāļāļāļāļģ (Scanning) â āļŠāđāļāļāļĢāļ°āđāļĄāļīāļāļāļąāļāļāļāļēāļāļēāļĢ (QueryingBank) â āļŠāļģāđāļĢāđāļ (Verified) / āļĨāđāļĄāđāļŦāļĨāļ§ (Failed)
- āļāļēāļĢāļāļđāđāļŠāļāļēāļāļ°āļŦāļĨāļąāļāļĨāđāļĄāđāļŦāļĨāļ§: āļŦāļēāļāļĒāļāļāđāļāļĨāļĩāđāļĒāļāđāļāđāļ Failed (āđāļāđāļ āļĒāļāļāđāļĄāđāļāļĢāļāļāļĢāļīāļāļŦāļĢāļ·āļāļĢāļ°āļāļāđāļāļāļāđāļĨāđāļĄ) āļĨāļđāļāļŦāļāļĩāđāļāļāļāļļāđāļĄāļŠāđāļāļāļĢāļ§āļāļŠāļāļāļāđāļ§āļĒāļĄāļ·āļāđāļāđ (Manual Review) āđāļāļ·āđāļāđāļŦāđāļāļēāļĢāđāļāđāļāđāļāđāļāļāļĩāđāļŦāļāđāļēāļāļāđāļāđāļēāļŦāļāļĩāđāđāļŦāđāļāļģāļāļēāļĢāđāļāđāļāļĒāļāļāđāļĨāļ°āļāļāļāļāļļāļĄāļąāļāļīāļāđāļ§āļĒāļāļāđāļāļ
3. āļŠāļāļēāļāļ°āļāļĨāļąāļāļāļĩāļ§āļīāļāļŠāļąāļāļ§āđāđāļĨāļĩāđāļĒāļāđāļĄāļāļī (Pet Health State Machine)
āļāļ§āļāļāļļāļĄāļŠāđāļāļāļąāļŠāļāļ§āļēāļĄāļĢāļđāđāļŠāļķāļāđāļĨāļ°āļŠāļļāļāļ āļēāļāļāļāļāļāđāļāļ Mochi āļāļēāļĄāļāļīāļŠāļąāļĒāļāļēāļĢāļāļģāļĢāļ°āđāļāļīāļāļāļāļāđāļāļ·āđāļāļāļĢāđāļ§āļĄāļŦāđāļāļ:
- āļ āļēāļāļĢāļ§āļĄāļĨāļģāļāļąāļāļŠāļāļēāļāļ°: āđāļāđāļāđāļĢāļāļŦāļĢāļĢāļĐāļē (Healthy) â āļāļāđāļāļāļąāđāļ§āđāļ (Content) â āđāļĻāļĢāđāļēāļāļąāļāļ§āļĨ (Sad) â āļāđāļ§āļĒāđāļāđ (Sick - āđāļĄāļ·āđāļāļāļĨāļąāļ HP āļāļķāļ 0)
- āļāļēāļĢāļāļđāđāļāļĨāļąāļāļāļĩāļ§āļīāļ: āļāđāļāļāđāļĄāļāļīāļāļ°āļŦāļēāļĒāļāđāļ§āļĒāđāļāđāļāļĨāļąāļāļĄāļēāļāļ·āđāļāļāļđāļāļēāļĄāđāļāļāļāđāđāļāđāļ Sad āļŦāļĢāļ·āļ Healthy āļāļēāļĄāļĨāļģāļāļąāļ āđāļĄāļ·āđāļāļŠāļĄāļēāļāļīāļāđāļāļĨāļĩāļĒāļĢāđāļŦāļāļĩāđāļāļĩāđāļāđāļēāļāļŠāļģāđāļĢāđāļ āļŦāļĢāļ·āļāđāļāđāļāļāļĒāļāđāļāļĨāļļāđāļĄāđāļĨāļāļāļāļĄāļāļĩāļāļāđāļāļāđāļĄāļāļī
4. āļŠāļāļēāļāļ°āļāļīāļ§āļāļēāļ AI āđāļāļĢāļ°āļāļāđāļāļ·āđāļāļāļŦāļĨāļąāļ (AI Reminder Job State Machine)
āļāļąāļāļāļķāļāļāļīāļ§āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāļēāļāļ āļēāļāļĄāļĩāļĄāļāļ§āļāđāļāļīāļāļŦāļĨāļąāļāļāđāļēāļ:
- āļ āļēāļāļĢāļ§āļĄāļĨāļģāļāļąāļāļŠāļāļēāļāļ°: āđāļāđāļēāļāļīāļ§āļĢāļąāļāļāļēāļ (Queued) â āļāļģāļĨāļąāļāļāļĢāļ°āļĄāļ§āļĨ (Running) â āļāļąāļāļŠāđāļāđāļŠāļĢāđāļāļŠāļīāđāļ (Success) / āļĨāđāļĄāđāļŦāļĨāļ§ (Failed)
- āđāļāļāļāļđāđāļāļ·āļāļāļēāļāļĨāđāļĄāđāļŦāļĨāļ§: āļĢāļ°āļāļāļĨāļāļāļŠāđāļāđāļŦāļĄāđāđāļāļ Retry āļāļąāļāđāļāļĄāļąāļāļī 3 āļāļĢāļąāđāļ āļŦāļēāļāļĒāļąāļāļāļāļāđāļāļāļīāļāļāļĨāļēāļāļāļĨāļēāļ§āļāđāļāļ°āđāļāļāđāļāđāļēāļāļīāļ§āļāđāļēāļāļĢāļąāļāđāļāļ·āđāļāđāļāđāļāļŠāļāļĢāļīāļāļāđ (DLQ)
5. āļŠāļāļēāļāļ°āļāļēāļĒāļļāđāļāļŠāļāļąāļāļāļēāļĢāļĨāđāļāļāļāļīāļ (User Session State Machine)
āļāļĢāļīāļŦāļēāļĢāļŠāļīāļāļāļīāđāļāļēāļĢāļĒāļ·āļāļĒāļąāļāļāļāđāļĨāļ°āļāļēāļĒāļļāļāļēāļĢāđāļāđāļēāļŠāļđāđāļĢāļ°āļāļ:
- āļ āļēāļāļĢāļ§āļĄāļĨāļģāļāļąāļāļŠāļāļēāļāļ°: āļĒāļąāļāđāļĄāđāđāļāđāļĨāđāļāļāļāļīāļ (Unauthenticated) â āļĨāđāļāļāļāļīāļāļĒāļ·āļāļĒāļąāļāļāļāļŠāļģāđāļĢāđāļ (Authenticated) â āđāļāđāļāđāļāļŦāļĄāļāļāļēāļĒāļļāđāļ 15 āļāļēāļāļĩ (Expired) â āļŠāļĨāļąāļāļŦāļĄāļļāļāđāļāđāļāđāļāļāļāđāļāđāļāđāļ§āļĒ Refresh Token â āļŦāļĨāļļāļāļĨāđāļāļāļāļīāļāļāļāļāļāļēāļāļĢāļ°āļāļ (Logout)
ðŽð§ English (For AI Agents)
1. Bill Lifecycle State Machine
- Allowed Transitions:
Draft -> Activewhen the creator clicks âPublishâ.Active -> Processingwhen a debtor submits a payment slip.Processing -> Settledwhen all shares are verified as paid.Settled -> Lockedautomatically 7 days after settlement.
- Invalid Transitions:
Active -> Draft(cannot un-publish).Settled -> Active(cannot re-open settled bills).
- Recovery Paths: If a payment is invalid, the share transitions back to
Active(unpaid) to allow the user to retry.
2. Payment Verification State Machine
- Allowed Transitions:
Pending -> Scanning -> QueryingBank -> Verified(Normal flow).QueryingBank -> Failedon bank service failure or data mismatch.
- Invalid Transitions:
Failed -> Verified(without creatorâs explicit manual override).
- Recovery Paths: If the bank API goes offline, the transaction is marked
Failedbut moves toManualReviewso the creditor can check their bank statement manually.
3. Pet Health State Machine
- Allowed Transitions:
Healthy -> Sad -> Sickbased on the elapsed time of overdue shares.Sick -> Sad -> Healthyas debts are cleared or XP is spent.
- Invalid Transitions:
Sick -> Healthydirectly (must pass through recovery thresholds).
4. AI Reminder Job State Machine
- Allowed Transitions:
Failed -> Queuedup to 3 times.Failed -> DLQafter max retries are exhausted.
- Invalid Transitions:
Success -> Failed.
- Recovery Paths: If generating a custom meme fails, the job falls back to sending a standard
Politenotification.
5. User Session State Machine
- Allowed Transitions:
Unauthenticated -> Authenticatedvia login/signup.Authenticated -> Expiredafter access token age exceeds 15 minutes.Expired -> Authenticatedvia silent refresh token rotation.Expired -> Unauthenticatedif refresh token is expired or revoked.Authenticated -> Unauthenticatedvia logout.