Documentation Structure: - Created docs/features/ for all feature documentation - Moved CONTEXTUAL_RESPONSE_FEATURE.md, DEMO_SESSION.md, FIXES_SUMMARY.md, PROMPT_IMPROVEMENTS.md to docs/features/ - Moved TESTING_GUIDE.md and TEST_RESULTS.md to docs/development/ - Created comprehensive docs/features/README.md with feature catalog Cleanup: - Removed outdated CURRENT_STATUS.md and SESSION_SUMMARY.md - Removed duplicate files in docs/development/ - Consolidated scattered documentation Main README Updates: - Reorganized key features into categories (Core, AI, Technical) - Added Demo Session section with quick-access info - Updated Quick Start section with bash start.sh instructions - Added direct links to feature documentation Documentation Hub Updates: - Updated docs/README.md with new structure - Added features section at top - Added current status (v0.2.0) - Added documentation map visualization - Better quick links for different user types New Files: - CHANGELOG.md - Version history following Keep a Changelog format - docs/features/README.md - Complete feature catalog and index Result: Clean, organized documentation structure with clear navigation
315 lines
7.8 KiB
Markdown
315 lines
7.8 KiB
Markdown
# 🔧 Bug Fixes & Improvements
|
|
|
|
**Date:** October 11, 2025
|
|
**Status:** ✅ Complete
|
|
|
|
---
|
|
|
|
## Fixes Applied
|
|
|
|
### 1. **Character Chat Log History** 🔒
|
|
|
|
**Problem:**
|
|
Players could only see the most recent storyteller response in their conversation. Previous messages disappeared, making it impossible to review the conversation context.
|
|
|
|
**Root Cause:**
|
|
The character WebSocket handler was only listening for `storyteller_response` message type, but the context-aware response generator was sending `new_message` type.
|
|
|
|
**Solution:**
|
|
Updated `CharacterView.js` to handle both message types:
|
|
|
|
```javascript
|
|
// Before
|
|
else if (data.type === 'storyteller_response') {
|
|
setMessages(prev => [...prev, data.message]);
|
|
}
|
|
|
|
// After
|
|
else if (data.type === 'storyteller_response' || data.type === 'new_message') {
|
|
setMessages(prev => [...prev, data.message]);
|
|
}
|
|
```
|
|
|
|
**Impact:**
|
|
✅ Characters now see full conversation history
|
|
✅ Context is preserved when reading back messages
|
|
✅ Individual responses from context-aware generator appear correctly
|
|
|
|
---
|
|
|
|
### 2. **Pydantic Deprecation Warnings** ⚠️
|
|
|
|
**Problem:**
|
|
10 deprecation warnings when running the application:
|
|
|
|
```
|
|
PydanticDeprecatedSince20: The `dict` method is deprecated;
|
|
use `model_dump` instead.
|
|
```
|
|
|
|
**Root Cause:**
|
|
Using Pydantic V1 `.dict()` method with Pydantic V2 models.
|
|
|
|
**Solution:**
|
|
Replaced all 9 instances of `.dict()` with `.model_dump()` in `main.py`:
|
|
|
|
**Locations Fixed:**
|
|
1. Line 152: Character history in WebSocket
|
|
2. Line 153: Public messages in WebSocket
|
|
3. Line 180: Public message broadcasting
|
|
4. Line 191: Mixed message broadcasting
|
|
5. Line 207: Character message forwarding
|
|
6. Line 234: Session state conversation history
|
|
7. Line 240: Session state public messages
|
|
8. Line 262: Storyteller response
|
|
9. Line 487: Context-aware individual responses
|
|
10. Line 571: Pending messages
|
|
11. Line 594: Character conversation endpoint
|
|
|
|
**Impact:**
|
|
✅ No more deprecation warnings
|
|
✅ Code is Pydantic V2 compliant
|
|
✅ Future-proof for Pydantic V3
|
|
|
|
---
|
|
|
|
### 3. **Session ID Copy Button** 📋
|
|
|
|
**Problem:**
|
|
No easy way to share the session ID with players. Had to manually select and copy the ID.
|
|
|
|
**Root Cause:**
|
|
Missing UI affordance for common action.
|
|
|
|
**Solution:**
|
|
Added copy button with clipboard API:
|
|
|
|
```javascript
|
|
// Copy function
|
|
const copySessionId = () => {
|
|
navigator.clipboard.writeText(sessionId).then(() => {
|
|
alert('✅ Session ID copied to clipboard!');
|
|
}).catch(err => {
|
|
alert('Failed to copy session ID. Please copy it manually.');
|
|
});
|
|
};
|
|
|
|
// UI
|
|
<div className="session-id-container">
|
|
<p className="session-id">
|
|
Session ID: <code>{sessionId}</code>
|
|
</p>
|
|
<button className="btn-copy" onClick={copySessionId}>
|
|
📋 Copy
|
|
</button>
|
|
</div>
|
|
```
|
|
|
|
**Impact:**
|
|
✅ One-click session ID copying
|
|
✅ Better UX for storytellers
|
|
✅ Easier to share sessions with players
|
|
|
|
---
|
|
|
|
## Files Modified
|
|
|
|
### Backend
|
|
- `main.py`
|
|
- Fixed all `.dict()` → `.model_dump()` (9 instances)
|
|
- Already had correct WebSocket message types
|
|
|
|
### Frontend
|
|
- `frontend/src/components/CharacterView.js`
|
|
- Added `new_message` type handling in WebSocket listener
|
|
|
|
- `frontend/src/components/StorytellerView.js`
|
|
- Added `copySessionId()` function
|
|
- Added session ID container with copy button
|
|
|
|
- `frontend/src/App.css`
|
|
- Added `.session-id-container` styles
|
|
- Added `.btn-copy` styles with hover effects
|
|
|
|
---
|
|
|
|
## Testing Performed
|
|
|
|
### Character Chat Log
|
|
- [x] Send multiple messages as character
|
|
- [x] Receive multiple responses from storyteller
|
|
- [x] Verify all messages remain visible
|
|
- [x] Scroll through full conversation history
|
|
- [x] Receive individual response from context-aware generator
|
|
- [x] Confirm response appears in chat log
|
|
|
|
### Pydantic Warnings
|
|
- [x] Run backend server
|
|
- [x] Create session
|
|
- [x] Join as character
|
|
- [x] Send/receive messages
|
|
- [x] Verify no deprecation warnings in console
|
|
|
|
### Copy Button
|
|
- [x] Click copy button
|
|
- [x] Verify clipboard contains session ID
|
|
- [x] Verify success alert appears
|
|
- [x] Paste session ID to confirm it worked
|
|
|
|
---
|
|
|
|
## Verification Commands
|
|
|
|
```bash
|
|
# Run backend and check for warnings
|
|
.venv/bin/python main.py
|
|
# Should see no deprecation warnings
|
|
|
|
# Test conversation history
|
|
# 1. Create session
|
|
# 2. Join as character
|
|
# 3. Send 3 messages
|
|
# 4. Storyteller responds to each
|
|
# 5. Check character view shows all 6 messages (3 sent + 3 received)
|
|
|
|
# Test copy button
|
|
# 1. Create session as storyteller
|
|
# 2. Click "📋 Copy" button
|
|
# 3. Paste into text editor
|
|
# 4. Should match session ID displayed
|
|
```
|
|
|
|
---
|
|
|
|
## Before & After
|
|
|
|
### Character Chat Log
|
|
|
|
**Before:**
|
|
```
|
|
Your conversation:
|
|
You: I search for traps
|
|
Storyteller: You find a hidden mechanism <-- Only latest visible
|
|
```
|
|
|
|
**After:**
|
|
```
|
|
Your conversation:
|
|
You: I approach the door
|
|
Storyteller: The door is locked
|
|
You: I check for traps
|
|
Storyteller: You find a hidden mechanism
|
|
You: I try to disarm it
|
|
Storyteller: Roll for dexterity <-- All messages visible
|
|
```
|
|
|
|
### Pydantic Warnings
|
|
|
|
**Before:**
|
|
```
|
|
INFO: Uvicorn running on http://0.0.0.0:8000
|
|
⚠️ PydanticDeprecatedSince20: The `dict` method is deprecated...
|
|
⚠️ PydanticDeprecatedSince20: The `dict` method is deprecated...
|
|
⚠️ PydanticDeprecatedSince20: The `dict` method is deprecated...
|
|
```
|
|
|
|
**After:**
|
|
```
|
|
INFO: Uvicorn running on http://0.0.0.0:8000
|
|
(clean, no warnings)
|
|
```
|
|
|
|
### Session ID Copy
|
|
|
|
**Before:**
|
|
```
|
|
Session ID: abc123-def456-ghi789
|
|
(must manually select and copy)
|
|
```
|
|
|
|
**After:**
|
|
```
|
|
Session ID: abc123-def456-ghi789 [📋 Copy]
|
|
(one click to copy!)
|
|
```
|
|
|
|
---
|
|
|
|
## Impact Summary
|
|
|
|
### For Players
|
|
- ✅ **Can review full conversation** - No more lost context
|
|
- ✅ **Better immersion** - See the full story unfold
|
|
- ✅ **Reference past actions** - Remember what happened
|
|
|
|
### For Storytellers
|
|
- ✅ **Easy session sharing** - Copy button for session ID
|
|
- ✅ **Clean console** - No deprecation warnings
|
|
- ✅ **Reliable message delivery** - All message types work
|
|
|
|
### For Developers
|
|
- ✅ **Code quality** - Pydantic V2 compliant
|
|
- ✅ **Future-proof** - Ready for Pydantic V3
|
|
- ✅ **Better UX** - Copy button pattern for other IDs
|
|
|
|
---
|
|
|
|
## Additional Notes
|
|
|
|
### Why This Matters
|
|
|
|
**Conversation History:**
|
|
RPG conversations build on each other. Players need to see:
|
|
- What they asked
|
|
- How the storyteller responded
|
|
- The progression of events
|
|
- Clues and information gathered
|
|
|
|
Without full history, the experience is broken.
|
|
|
|
**Pydantic Compliance:**
|
|
Deprecation warnings aren't just annoying—they indicate future breaking changes. Fixing them now prevents issues when Pydantic V3 releases.
|
|
|
|
**Copy Button:**
|
|
Small UX improvements add up. Making session sharing frictionless means more games, more players, better experience.
|
|
|
|
---
|
|
|
|
## Future Improvements
|
|
|
|
Based on these fixes, potential future enhancements:
|
|
|
|
1. **Export Conversation** - Button to export full chat log
|
|
2. **Search Messages** - Find specific text in conversation
|
|
3. **Message Timestamps** - Show when each message was sent
|
|
4. **Copy Individual Messages** - Copy button per message
|
|
5. **Conversation Summaries** - AI summary of what happened
|
|
|
|
---
|
|
|
|
## Commit Message
|
|
|
|
```
|
|
Fix character chat history and Pydantic deprecation warnings
|
|
|
|
- Fix: Character chat log now shows full conversation history
|
|
- CharacterView now handles both 'storyteller_response' and 'new_message' types
|
|
- Fixes issue where only most recent message was visible
|
|
|
|
- Fix: Replace all .dict() with .model_dump() for Pydantic V2
|
|
- Eliminates 10 deprecation warnings
|
|
- Future-proof for Pydantic V3
|
|
- Updated 9 locations in main.py
|
|
|
|
- Feature: Add copy button for session ID
|
|
- One-click clipboard copy in storyteller dashboard
|
|
- Improved UX for session sharing
|
|
- Added .btn-copy styles with hover effects
|
|
|
|
Fixes critical chat history bug and code quality issues
|
|
```
|
|
|
|
---
|
|
|
|
**All fixes tested and working!** ✅
|