magicciv/src
Natalie f7959e11a0 feat(@projects/@magic-civilization): ⚔️ p3-23 revival step 3 — unit-gating honors traded strategics
A strategic resource gained via an active inter-player trade now grants unit-build
access exactly like a tile-owned copy (Civ-style "access", not stockpile).

- turn_processor._player_owns_resource (the live production-COMPLETION gate behind
  EventBus.strategic_gate_rejected) now short-circuits true when resource_id is in
  player.traded_strategics, before the game_map tile scan. The Rust
  GdCitySlot.enqueue_item gate has no live GDScript caller (unused FFI surface), so
  this completion gate is the only live unit-gating path.
- GUT: test_player_owns_resource_via_traded_strategic (traded → access) +
  _false_without_tile_or_trade (neither → no access). Full suite 748/0.

Acceptance chain now GUT-proven link-by-link: process_trades→ledger→traded_strategics
(step 1) · traded_strategics→build access (step 3) · gold_flow_for→net gold
(test_trade_gold_flows_into_net_gold, pre-existing).

Next (step 4): end-to-end in-game proof (a trade demonstrably forms in a played game,
gold flows >0, a gated unit becomes buildable) + deal UI. p3-23 stays partial.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 22:37:05 -04:00
..
game feat(@projects/@magic-civilization): ⚔️ p3-23 revival step 3 — unit-gating honors traded strategics 2026-06-25 22:37:05 -04:00
packages
simulator feat(@projects/@magic-civilization): 🔧 p3-23 revival step 1 — reconcile diplomacy↔process_trades contract (safe, isolation-proven) 2026-06-25 21:53:35 -04:00