2.8 KiB
2.8 KiB
Controller State Mutation Matrix
This document maps application methods to the state fields they modify and the locks that protect those mutations.
1. Mutation Matrix Table
| Method Name | Class | State Field(s) Modified | Lock(s) Used | Thread Context |
|---|---|---|---|---|
_process_event_queue |
AppController |
ai_status, mma_status |
_pending_gui_tasks_lock |
Event Thread |
_handle_request_event |
AppController |
ai_status |
_pending_gui_tasks_lock |
AI Worker Thread |
_set_status |
AppController |
ai_status |
_pending_gui_tasks_lock |
Any (Helper) |
_set_mma_status |
AppController |
mma_status |
_pending_gui_tasks_lock |
Any (Helper) |
_send_anthropic/gemini |
ai_client |
history (via callback) |
_anthropic/deepseek/minimax_history_lock, _send_lock |
AI Worker Thread |
init_state |
AppController |
disc_entries |
_disc_entries_lock |
Main Thread (Init) |
switch_discussion |
AppController |
active_discussion, disc_entries |
_disc_entries_lock |
Main/Event Thread |
_process_pending_gui_tasks |
App |
disc_entries, ai_status, mma_status |
_pending_gui_tasks_lock, _disc_entries_lock |
Render Thread |
_take_snapshot |
App |
_last_ui_snapshot |
None (Single threaded UI) | Render Thread |
_handle_history_logic |
App |
history (HistoryManager) |
None (Single threaded UI) | Render Thread |
_rebuild_rag_index |
AppController |
rag_status |
_pending_gui_tasks_lock |
RAG Worker Thread |
_queue_put (FastAPI) |
AppController |
_api_event_queue |
_api_event_queue_lock |
FastAPI Thread |
2. Lock Ownership Audit
2.1 The Foreground/Background Gate
The _pending_gui_tasks_lock is the most critical synchronization point. Background threads (AI, MMA, RAG) use this to queue state updates. The Render thread (Pipeline 2.3) drains this queue every frame.
- Risk: High lock contention if background threads queue too frequently (e.g., streaming status).
2.2 Global SDK Serializer
_send_lock in ai_client.py serializes all AI requests across the entire application, regardless of provider.
- Finding: This is a major bottleneck if multi-agent concurrency is desired, as it prevents parallel SDK calls.
2.3 History Data Integrity
_disc_entries_lock ensures that the UI doesn't render a partially-updated history list while a background thread is appending a new AI response.
3. State Lifecycle & Flushing
- Memory vs. Disk: State is held in memory (
AppControllerattributes). - Flushing:
_last_autosavetracks the 60s interval._process_event_queue(Event Thread) triggers the disk flush tohistory.tomlormanual_slop.toml. - Finding: The UI Thread (
_handle_history_logic) also performs snapshots for Undo/Redo, creating a dual-layer state persistence model.