/** * Symbolic Guardrails for The Beacon * Ensures game logic consistency. */ class Guardrails { static validateStats(stats) { const required = ['hp', 'maxHp', 'mp', 'maxMp', 'level']; required.forEach(r => { if (!(r in stats)) throw new Error(`Missing stat: ${r}`); }); if (stats.hp > stats.maxHp) return { valid: false, reason: 'HP exceeds MaxHP' }; return { valid: true }; } static validateDebuff(debuff, stats) { if (debuff.type === 'drain' && stats.hp <= 1) { return { valid: false, reason: 'Drain debuff on critical HP' }; } return { valid: true }; } } // Test const playerStats = { hp: 50, maxHp: 100, mp: 20, maxMp: 50, level: 1 }; console.log('Stats check:', Guardrails.validateStats(playerStats));