Offers can be found at any stage of the search:
- Directly from destination (1 edge)
- After 1 auto edge
- At rail station
- After rail + 1 auto
Rail is not mandatory - search expands radius until offers found.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Business rule: auto can only be 1 edge at start and end of route.
- end_auto → end_auto_done after 1 auto edge
- rail → start_auto_done after 1 auto edge
- Remove MAX_AUTO_DISTANCE_KM/MAX_AUTO_TIME_SECONDS constraints
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Graphene can pass None as self for root queries. Call helper functions
directly instead of via self.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 'offer' transport_type transition in allowed_next_phase()
- Include 'offer' in fetch_neighbors() types for start_auto phase
- Enables algorithm to traverse: destination → auto → rail → auto → offer
- Add offers/services.py with OfferService class
- Add Django admin action 'Sync to graph' for offers
- Update seed_exchange for African cocoa belt hubs
- Seed can now create offers via Temporal workflow
- Add get_account_transfers() to TigerBeetle client
- Update team_schema to return real transactions from TigerBeetle
- Include direction (credit/debit) and counterparty UUID
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- fromAccountId, toAccountId instead of debitAccountId, creditAccountId
- ledger hardcoded to 1 (RUB)
- Keep code for inter-service coordination
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
TigerBeetle runs with --privileged and billing service has CAP_SYS_ADMIN
for io_uring support.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
TigerBeetle Python client requires io_uring which is disabled in most
containerized environments. The import itself causes a process crash.
Added TB_ENABLED env var (default: false) - TigerBeetle is only imported
when explicitly enabled. API returns empty results instead of crashing.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
KYC is auth-only: user must be logged in to create/view requests.
No public endpoint needed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
KYC is user-only flow: user creates application → workflow runs → team created.
No team endpoint needed.
Backend:
- Remove /graphql/team/ route
- Remove TeamGraphQLView and TeamJWTMiddleware
- Delete team_schema.py
Frontend:
- Remove kycTeam Apollo client
- Remove team:kyc mapping
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The TigerBeetle Python client crashes when io_uring is not available
(common in containerized environments). Fixed by:
- Making TigerBeetle import lazy in admin.py (import inside methods)
- Making client connection lazy (only connect on first actual use)
- Simplified admin actions to use new create_accounts/create_transfers API
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>