refactor(complement-race): remove verbose logging, keep only train debug logs
Removed all excessive console logging that was causing console overflow. **Removed**: - GameDisplay: All keyboard/answer validation logs (input bug is fixed) - Context reducer: All action dispatched logs - Provider: Verbose state transformation details - Provider: Dispatch compatibility layer logs **Kept (for train/pressure debugging)**: - Provider: Sprint-specific values (momentum, trainPosition, pressure) - SteamTrainJourney: Component props and state This should give us minimal, focused logs to debug: 1. Why train isn't appearing 2. Why pressure is stuck at 100 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -70,12 +70,6 @@ export function GameDisplay() {
|
||||
// Only process number keys
|
||||
if (/^[0-9]$/.test(e.key)) {
|
||||
const newInput = state.currentInput + e.key
|
||||
console.log('⌨️ [KeyPress] Number key pressed:', {
|
||||
key: e.key,
|
||||
oldInput: state.currentInput,
|
||||
newInput,
|
||||
currentQuestion: state.currentQuestion?.number,
|
||||
})
|
||||
dispatch({ type: 'UPDATE_INPUT', input: newInput })
|
||||
|
||||
// Check if answer is complete
|
||||
@@ -83,27 +77,12 @@ export function GameDisplay() {
|
||||
const answer = parseInt(newInput, 10)
|
||||
const correctAnswer = state.currentQuestion.correctAnswer
|
||||
|
||||
console.log('🔍 [KeyPress] Checking answer:', {
|
||||
newInput,
|
||||
newInputLength: newInput.length,
|
||||
correctAnswer,
|
||||
correctAnswerLength: correctAnswer.toString().length,
|
||||
willSubmit: newInput.length >= correctAnswer.toString().length,
|
||||
})
|
||||
|
||||
// If we have enough digits to match the answer, submit
|
||||
if (newInput.length >= correctAnswer.toString().length) {
|
||||
const responseTime = Date.now() - state.questionStartTime
|
||||
const isCorrect = answer === correctAnswer
|
||||
const pairKey = `${state.currentQuestion.number}_${state.currentQuestion.correctAnswer}_${state.currentQuestion.targetSum}`
|
||||
|
||||
console.log('📝 [KeyPress] Submitting answer:', {
|
||||
answer,
|
||||
correctAnswer,
|
||||
isCorrect,
|
||||
responseTime,
|
||||
})
|
||||
|
||||
if (isCorrect) {
|
||||
// Correct answer
|
||||
dispatch({ type: 'SUBMIT_ANSWER', answer })
|
||||
@@ -154,7 +133,6 @@ export function GameDisplay() {
|
||||
dispatch({ type: 'SHOW_ADAPTIVE_FEEDBACK', feedback })
|
||||
}
|
||||
|
||||
console.log('➡️ [KeyPress] Dispatching NEXT_QUESTION after correct answer')
|
||||
dispatch({ type: 'NEXT_QUESTION' })
|
||||
} else {
|
||||
// Incorrect answer
|
||||
@@ -172,16 +150,11 @@ export function GameDisplay() {
|
||||
dispatch({ type: 'SHOW_ADAPTIVE_FEEDBACK', feedback })
|
||||
}
|
||||
|
||||
console.log('❌ [KeyPress] Incorrect answer - clearing input')
|
||||
dispatch({ type: 'UPDATE_INPUT', input: '' })
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (e.key === 'Backspace') {
|
||||
console.log('⌫ [KeyPress] Backspace pressed:', {
|
||||
oldInput: state.currentInput,
|
||||
newInput: state.currentInput.slice(0, -1),
|
||||
})
|
||||
dispatch({
|
||||
type: 'UPDATE_INPUT',
|
||||
input: state.currentInput.slice(0, -1),
|
||||
@@ -189,16 +162,8 @@ export function GameDisplay() {
|
||||
}
|
||||
}
|
||||
|
||||
console.log('🔄 [KeyPress Effect] Setting up keyboard listener with state:', {
|
||||
currentInput: state.currentInput,
|
||||
currentQuestion: state.currentQuestion?.number,
|
||||
})
|
||||
|
||||
window.addEventListener('keydown', handleKeyPress)
|
||||
return () => {
|
||||
console.log('🧹 [KeyPress Effect] Cleaning up keyboard listener')
|
||||
window.removeEventListener('keydown', handleKeyPress)
|
||||
}
|
||||
return () => window.removeEventListener('keydown', handleKeyPress)
|
||||
}, [
|
||||
state.currentInput,
|
||||
state.currentQuestion,
|
||||
@@ -231,19 +196,6 @@ export function GameDisplay() {
|
||||
|
||||
if (!state.currentQuestion) return null
|
||||
|
||||
// DEBUG: Log state on every render
|
||||
console.log('🎮 [GameDisplay] Render:', {
|
||||
currentInput: state.currentInput,
|
||||
currentInputLength: state.currentInput?.length,
|
||||
currentInputType: typeof state.currentInput,
|
||||
currentQuestion: state.currentQuestion,
|
||||
questionNumber: state.currentQuestion?.number,
|
||||
correctAnswer: state.currentQuestion?.correctAnswer,
|
||||
targetSum: state.currentQuestion?.targetSum,
|
||||
score: state.score,
|
||||
streak: state.streak,
|
||||
})
|
||||
|
||||
return (
|
||||
<div
|
||||
data-component="game-display"
|
||||
|
||||
@@ -113,13 +113,6 @@ const initialState: GameState = {
|
||||
}
|
||||
|
||||
function gameReducer(state: GameState, action: GameAction): GameState {
|
||||
console.log('🔄 [Reducer] Action dispatched:', {
|
||||
type: action.type,
|
||||
action,
|
||||
currentInput: state.currentInput,
|
||||
currentQuestion: state.currentQuestion?.number,
|
||||
})
|
||||
|
||||
switch (action.type) {
|
||||
case 'SET_MODE':
|
||||
return { ...state, mode: action.mode }
|
||||
@@ -178,8 +171,6 @@ function gameReducer(state: GameState, action: GameAction): GameState {
|
||||
}
|
||||
|
||||
case 'NEXT_QUESTION': {
|
||||
console.log('➡️ [Reducer] NEXT_QUESTION - clearing input and generating new question')
|
||||
|
||||
// Generate new question based on mode
|
||||
const generateQuestion = () => {
|
||||
let targetSum: number
|
||||
@@ -221,28 +212,16 @@ function gameReducer(state: GameState, action: GameAction): GameState {
|
||||
}
|
||||
}
|
||||
|
||||
const newQuestion = generateQuestion()
|
||||
console.log('📊 [Reducer] NEXT_QUESTION result:', {
|
||||
oldQuestion: state.currentQuestion,
|
||||
newQuestion,
|
||||
oldInput: state.currentInput,
|
||||
newInput: '',
|
||||
})
|
||||
|
||||
return {
|
||||
...state,
|
||||
previousQuestion: state.currentQuestion,
|
||||
currentQuestion: newQuestion,
|
||||
currentQuestion: generateQuestion(),
|
||||
questionStartTime: Date.now(),
|
||||
currentInput: '',
|
||||
}
|
||||
}
|
||||
|
||||
case 'UPDATE_INPUT':
|
||||
console.log('✏️ [Reducer] UPDATE_INPUT:', {
|
||||
oldInput: state.currentInput,
|
||||
newInput: action.input,
|
||||
})
|
||||
return { ...state, currentInput: action.input }
|
||||
|
||||
case 'SUBMIT_ANSWER': {
|
||||
|
||||
@@ -244,14 +244,6 @@ export function ComplementRaceProvider({ children }: { children: ReactNode }) {
|
||||
const compatibleState = useMemo((): CompatibleGameState => {
|
||||
const localPlayer = localPlayerId ? multiplayerState.players[localPlayerId] : null
|
||||
|
||||
console.log('🔄 [Provider] State transformation:', {
|
||||
localPlayerId,
|
||||
localPlayer,
|
||||
multiplayerGamePhase: multiplayerState.gamePhase,
|
||||
allPlayers: multiplayerState.players,
|
||||
activePlayers: multiplayerState.activePlayers,
|
||||
})
|
||||
|
||||
// Map gamePhase: setup/lobby -> controls
|
||||
let gamePhase: 'intro' | 'controls' | 'countdown' | 'playing' | 'results'
|
||||
if (multiplayerState.gamePhase === 'setup' || multiplayerState.gamePhase === 'lobby') {
|
||||
@@ -499,8 +491,6 @@ export function ComplementRaceProvider({ children }: { children: ReactNode }) {
|
||||
// Compatibility dispatch function for existing UI components
|
||||
const dispatch = useCallback(
|
||||
(action: { type: string; [key: string]: any }) => {
|
||||
console.log('[ComplementRaceProvider] dispatch called (compatibility layer):', action.type)
|
||||
|
||||
// Map old reducer actions to new action creators
|
||||
switch (action.type) {
|
||||
case 'START_COUNTDOWN':
|
||||
@@ -514,7 +504,6 @@ export function ComplementRaceProvider({ children }: { children: ReactNode }) {
|
||||
}
|
||||
break
|
||||
case 'NEXT_QUESTION':
|
||||
console.log('🧹 [Provider] NEXT_QUESTION - clearing local input state')
|
||||
setLocalUIState((prev) => ({ ...prev, currentInput: '' }))
|
||||
nextQuestion()
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user