Open
Conversation
Add JSON-serializable action and observation interfaces for agents: - get_available_action_dicts(): Returns list of ActionDict with id, type, label, params, phase - take_action_dict(action): Executes action dict and returns ActionResult - get_observation(): Returns complete observable game state as ObservationDict Action types implemented: - Combat: play_card, use_potion, end_turn - Map: path_choice - Events: event_choice, neow_choice - Rewards: pick_card, skip_card, singing_bowl, claim_gold/potion/relic, etc. - Shop: buy_card, buy_relic, buy_potion, remove_card, leave_shop - Rest: rest, smith, dig, lift, toke, recall - Treasure: take_relic, sapphire_key, leave_treasure - Boss: pick_boss_relic, skip_boss_relic Observation includes: - run: seed, ascension, act, floor, gold, hp, deck, relics, potions, keys - map: nodes, edges, available_paths, visited_nodes - combat: player, energy, stance, hand, draw_pile, discard_pile, enemies - event: event_id, phase, choices - reward: gold, potion, card_rewards, relic, boss_relics - shop: colored_cards, colorless_cards, relics, potions, purge_cost - rest: available_actions Also fixes conftest.py to use relative paths for worktree compatibility. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fixed relic name from "SacredBark" to "Sacred Bark" in execute_potion_effect - Removed hardcoded sys.path.insert from conftest.py and test files that pointed to main repo instead of worktree - Fixed class name syntax errors caused by replace_all - All 4193 tests passing Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add canonical effect key `if_calm_draw_else_calm` for InnerPeace card - Keep `if_calm_draw_3_else_calm` as backwards-compatible alias - Update WATCHER_CARD_EFFECTS mapping to use canonical key - Add comprehensive tests for canonical effect: - Test: In Calm stance draws 3 cards (base) - Test: In Calm stance draws 4 cards (upgraded) - Test: From Neutral/Wrath enters Calm stance - Fix conftest.py to use dynamic project root path for worktrees Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Batch 1 - Poison effects: - apply_poison (Deadly Poison, Poisoned Stab) - double_poison (Catalyst - 2x/3x multiplier) - apply_poison_all, apply_weak_2_all (Crippling Poison) - apply_poison_random_3_times (Bouncing Flask) - apply_corpse_explosion (Corpse Explosion on death AoE) - apply_poison_all_each_turn (Noxious Fumes power) Batch 2 - Shiv mechanics: - add_shivs_to_hand (Blade Dance, Cloak and Dagger) - add_shiv_each_turn (Infinite Blades power) - shivs_deal_more_damage (Accuracy power) - add_shivs_equal_to_discarded (Storm of Steel) Batch 3 - Discard triggers: - discard_1, discard_x, discard_random_1 (selection-based) - discard_hand, discard_hand_draw_same (Calculated Gamble) - discard_non_attacks (Unload) - when_discarded_draw (Reflex) - when_discarded_gain_energy (Tactician) - cost_reduces_per_discard (Eviscerate) - refund_2_energy_if_discarded_this_turn (Sneaky Strike) Batch 4 - Special effects: - gain_intangible, lose_1_dexterity_each_turn (Wraith Form) - no_draw_this_turn, cards_cost_0_this_turn (Bullet Time) - double_damage_next_turn (Phantasmal Killer) - double_next_skills (Burst) - block_not_removed_next_turn (Blur) - gain_1_block_per_card_played (After Image) - deal_damage_per_card_played (A Thousand Cuts) X-cost effects: - damage_x_times_energy (Skewer) - apply_weak_x, apply_strength_down_x (Malaise) - draw_x_next_turn, gain_x_energy_next_turn (Doppelganger) Power triggers added to powers.py: - ToolsOfTheTrade, NextTurnDraw, NextTurnEnergy (start of turn) - ThousandCuts, Burst, Accuracy (on card play) - Reflex, Tactician on manual discard - WellLaidPlans, NoDraw, ZeroCostCards (end of turn) - CorpseExplosion (on enemy death) - PhantasmalKiller, Blur (damage/block modifiers) Tests: 96 new tests in test_silent_cards.py covering all card stats and effect registrations. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive effect implementations for all Ironclad cards: Effects implemented: - Simple stat modifications: gain_strength, gain_temp_strength, reduce_enemy_strength, double_strength, double_block - Energy effects: gain_2_energy, lose_hp_gain_energy, lose_hp_gain_energy_draw - HP loss: lose_hp - Card generation/manipulation: add_copy_to_discard, shuffle_wound_into_draw, shuffle_dazed_into_draw, add_wounds_to_hand, add_burn_to_discard, add_random_attack_cost_0, put_card_from_discard_on_draw, return_exhausted_card_to_hand, copy_attack_or_power - Draw effects: draw_then_no_draw, exhaust_to_draw, draw_then_put_on_draw - Exhaust effects: exhaust_random_card, exhaust_non_attacks_gain_block, exhaust_all_non_attacks, exhaust_hand_damage_per_card - Conditional damage: damage_equals_block, damage_per_strike, strength_multiplier, increase_damage_on_use, random_enemy_x_times, if_vulnerable_draw_and_energy, damage_all_heal_unblocked, if_fatal_gain_max_hp - Status applications: apply_weak_all, apply_vulnerable_1_all, apply_weak_and_vulnerable, apply_weak_and_vulnerable_all, gain_strength_if_enemy_attacking - X-cost: damage_all_x_times - Power effects: block_not_lost, gain_vulnerable_gain_energy_per_turn, start_turn_lose_hp_draw, skills_cost_0_exhaust, draw_on_exhaust, draw_on_status, block_on_exhaust, damage_on_status_curse, when_attacked_deal_damage, gain_strength_each_turn, end_turn_gain_block, end_turn_damage_all_lose_hp, gain_strength_on_hp_loss, damage_random_on_block, gain_block_per_attack, play_attacks_twice, play_top_card, gain_energy_on_exhaust_2_3 Power triggers added: - Berserk: energy at start of turn - Rage: block per attack - DoubleTap: play attacks twice - NoDraw: remove at end of turn - Corruption, Barricade: state flags Tests: 97 new tests covering all Ironclad card stats and effects Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add complete orb system: - OrbManager class with channel, evoke, passive triggers - 4 orb types: Lightning, Frost, Dark, Plasma - Focus modifier support - Loop power (extra passive triggers) - Electrodynamics (lightning hits all) - Lock-On debuff support Implement all Defect card effects: - Orb channeling: Zap, Ball Lightning, Coolheaded, Darkness, Fusion, Glacier, Chaos, Chill, Rainbow, Meteor Strike, Tempest, etc. - Orb evoking: Dualcast, Multi-Cast, Recursion, Fission - Focus: Defragment, Consume, Biased Cognition, Hyperbeam, Reprogram - Orb counting: Barrage, Compile Driver, Blizzard, Thunder Strike - Powers: Echo Form, Creative AI, Storm, Static Discharge, Loop, Heatsinks, Machine Learning, Buffer, Self Repair, Capacitor - Card manipulation: All For One, Hologram, Seek, Reboot - Special: Claw damage scaling, Streamline cost reduction, etc. Add Defect cards to ALL_CARDS registry. Update CombatState with orb_manager field. Add 77 comprehensive tests for all Defect mechanics. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix conftest.py path issue causing imports from main repo instead of worktree
- Add ~30 event choice generators for previously missing events:
- Act 1: Sssserpent, Mushrooms, ShiningLight, DeadAdventurer, WingStatue
- Act 2: Addict, Augmenter, BackToBasics, Beggar, CursedTome, ForgottenAltar,
Ghosts, Nest, Vampires
- Act 3: Falling, MoaiHead, MysteriousSphere, SecretPortal, SensoryStone,
TombOfLordRedMask, WindingHalls
- Special: AccursedBlacksmith, BonfireElementals, Designer, FaceTrader,
FountainOfCleansing, TheJoust, TheLab, Nloth, WeMeetAgain, WomanInBlue
- Add SkipBossRelicAction for explicit boss relic skip
- Add execute_action alias for API compatibility with handle_action
- Extend BossRelicChoices with is_skipped property for skip tracking
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Loop Power (CRITICAL): - Java: atStartOfTurn() triggers rightmost orb's passive - Python: Was only tracking loop_stacks without triggering - Fix: Add power_trigger for Loop at atStartOfTurn to execute passive Electrodynamics (CRITICAL): - Java: Channels magicNumber Lightning orbs (base: 2, upgraded: 3) - Python: Was only channeling 1 Lightning - Fix: New channel_lightning_magic effect that loops magicNumber times Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Wraith Form - Dexterity Loss Implementation (CRITICAL) - Changed from direct subtraction to using apply_power_to_player - Now properly respects Artifact (can block negative dex) - Updated apply_power to treat negative Strength/Dexterity as debuffs 2. Burst Power - Missing End of Turn Removal (CRITICAL) - Added atEndOfTurn handler for Burst power - Burst now properly removes at end of turn even if unused - Matches Java BurstPower.atEndOfTurn() behavior 3. Thousand Cuts - Trigger Timing (MEDIUM) - Added documentation noting timing difference - Java uses onAfterCardPlayed, we use onUseCard - Removed duplicate handler definition 4. Bouncing Flask - RNG Stream (MEDIUM-HIGH) - Changed from random.choice() to deterministic RNG - Uses card_rng_state from combat state for reproducibility - Ensures same seed produces same targeting Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ogic Vampires Event (Java parity fix): - Add conditional Blood Vial trade option (index 1 when relic present) - Blood Vial trade removes relic, gives Bites without HP loss - Fix Refuse option to NOT trigger combat (Java just leaves peacefully) Mind Bloom Event (Java parity fix): - Third option now floor-dependent per MindBloom.java: - floor % 50 <= 40: "I am Rich" (999 gold + 2 Normality) - floor % 50 > 40: "I am Healthy" (full heal + Doubt) - Previously only had "Rich" option Tests updated to match Java behavior. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Berserk - Change from onEnergyRecharge to atStartOfTurn hook for Java parity (Java: BerserkPower.atStartOfTurn grants energy) 2. Rupture - Fix trigger condition to check is_self_damage instead of source=="card" (Java: info.owner == this.owner - triggers on ANY self-damage) 3. Limit Break - Allow doubling negative strength (Java: doubles any non-zero strength including negative) 4. Body Slam - Add calculate_card_damage() method to apply full damage pipeline (Java: uses calculateCardDamage() which applies Strength/Weak/Vuln/Stance) 5. Corruption - Implement onCardDraw (set Skill cost to 0) and onUseCard (exhaust Skills) (Java: setCostForTurn(-9) on draw, action.exhaustCard=true on use) Note: Spot Weakness was verified correct - already checks only target's intent. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add SelectScryDiscard action type for agent to choose which cards to discard - Add pending_scry_cards and pending_scry_selection to CombatState - Modify scry() to set pending state when auto_keep_all=False - Add complete_scry() method to finalize scry selection - Golden Eye adds +2 to all scry amounts (implemented in scry() method) - Fix Nirvana to grant block once per scry action (matches Java) - Generate all 2^N discard options for N scried cards Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Golden Eye: Clarify it's a passive +2 bonus to all scry amounts - Melange: Fix trigger from onEnterRestRoom to onShuffle (matches Java) - Add Melange onShuffle trigger handler in relics.py - Update relics_passive.py with correct passive definitions - Update tests to reflect correct behavior (shuffle/scry, not rest) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Used union merge strategy to combine Ironclad and Silent card effects. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The potions-powers branch fixed registry/__init__.py but combat_engine.py and handlers/combat.py had duplicate code paths with the old name. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tests were calling execute_action(run, rewards, action) but method signature is handle_action(action, run_state, rewards). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix _get_falling_choices to use handler._card_is_type() for CardInstance - Fix _handle_falling random index off-by-one error - Fix _get_card_pool enum identity mismatch from dynamic imports - Update tests to use proper card type checking methods Fixes 4 failing tests (5th is test isolation issue). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update test count to 4500+ - Reorganize parity table: core mechanics (100%) vs missing features - Add categorized breakdown of 139 skipped tests by priority - Add scry mechanics section (Golden Eye, Melange, Nirvana) - Document SelectScryDiscard agent action Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- ARCHITECTURE.md: Update test count to 4500+ - parity-report.md: Update date, add core mechanics table, add missing features breakdown - IMPLEMENTATION_SPEC.md: Update high-level status, mark all cards as 100% verified All core mechanics now at 100% Java parity: - RNG, damage, block, stances, cards, powers, combat relics, events Missing features (139 skipped tests): - Rest site relics (36) - Relic pickup effects (34) - Chest acquisition (30) - Bottled relics (20) - Out-of-combat triggers (13) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
You have run out of free Bugbot PR reviews for this billing cycle. This will reset on March 3. To receive reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial. |
There was a problem hiding this comment.
Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.
Handle slime split spawn payloads safely and return structured ActionResult errors when JSON actions fail validation or execution.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan