# WarBoard Changelog

## 1.6.1

> **Everyone should update.** The bounty tracking fix works both when you track *and* when
> you're the one being tracked — an out-of-date client can still fail to answer a tracker.

### Fixes
- **Bounty TRACK no longer gets stuck on "Locating…".** The target's client was only recognizing
  a tracker's request by GUID, but a bounty's GUID is captured from the community roster when it's
  posted and can differ from the target's current character — so the target silently ignored the
  request and never shared its location. It now recognizes a track request by **GUID *or*
  name+realm** (the same way it already detects a bounty on itself), so tracking connects reliably.
  This is why supply-runner tracking worked while bounties didn't — a supply runner reports its own
  live identity, so it always matched.
- Hardened the track handshake generally: the request is now sent to every valid address for the
  target (stored + roster-resolved), and realm names are normalized so a display-form realm
  ("Area 52") can't silently break the whisper the request rides on.
- **Supply Run objective card now shows on the War Effort panel.** A load-order race meant the run
  wasn't resolved yet when the panel was first built, so the card was skipped.

### Added
- `/wb commdebug` — toggle a comm / tracking RX-TX trace for diagnosing tracking issues.

## 1.6.0

### New: Supply Run (daily World PvP delivery event)
A new daily event that turns a supply haul into open-world PvP bait. There's a separate Horde and
Alliance version — you only see and run your own faction's.

- **Horde** — talk to Overseer Gorthak at Warsong Lumber Camp, then haul the lumber on foot to
  Tweedle at Hellscream's Watch.
- **Alliance** — talk to Faldreas Goeth'Shael in Astranaar, then carry the ironwood beams on foot
  to Apprentice Boulian at Forest Song.
- Multi-page quartermaster dialogue (fake gossip), an objective card, a map pin at the pickup, and
  an objective-tracker step guide the run.
- **On foot only** — mounting, flying, druid Travel/Flight Form, taxis, and vehicles are all
  blocked while carrying the shipment (you're too heavily loaded).
- **Daily, per character** — once completed *or* failed, it's locked for that character until the
  next daily reset.
- **Fails** on death, logging out mid-run, taking a taxi, or crossing a loading screen.
- **Reward** — a completed run pays **300 gold + 150 war credit**.

### New: Supply Runner intel, opt-in tracking & cargo theft
Supply runners are visible to the enemy, and their cargo can be stolen.

- While you carry a shipment, a lightweight **alert** is broadcast to the enemy faction
  ("SUPPLY RUNNER SPOTTED"). No precise location is shared by default.
- Enemies can click **TRACK** on the alert to opt into live location tracking, drawing a flag
  icon on the world map (reuses the bounty location transport — only trackers who opt in ever see
  the position).
- **Cargo theft** — landing the killing blow on an enemy supply runner **steals their cargo**. You
  become a stolen-cargo carrier ("STOLEN SUPPLIES MOVING"), subject to the same on-foot rule, and
  can turn it in at your own quartermaster with **no daily cooldown**.
- Stolen cargo is **lost** on death (your killer steals it in turn), logout, loading screen, or
  taxi; it **survives a `/reload`**. You can carry multiple stolen shipments at once.
- **Reward** — each turned-in stolen shipment pays the same as a Supply Run: **300 gold + 150 war
  credit**.

### Rewards are now banked & synced
- Supply Run completions and stolen-cargo turn-ins now write a real, synced **`supply_run` ledger
  record** — they count toward your gold/war-credit totals, the leaderboard, and the war
  contribution bar, and are validated by the anti-cheat verifier like any other activity.
- Added a canonical `WB.SUPPLY_REWARD` (300 gold / 150 war credit) as the single source of truth
  shared by the run layer, the cargo layer, and the verifier.
- Rules version bumped to **6** for the new `supply_run` activity type, so out-of-date clients
  safely abstain on (and keep relaying) the new records until they update, rather than rejecting
  them.

### Fixes
- **Bounty TRACK now reliably locates online targets.** Pressing TRACK on a bounty whose target
  was clearly online could still fall through to "Failed to obtain." That's fixed — TRACK now
  correctly obtains their location. (Targets who don't have the addon, or have it disabled, still
  correctly can't be tracked, but no longer cause a false handshake.)
- **Supply runner map flag no longer lingers after a run ends.** When a tracked runner fails,
  delivers, or loses their cargo, the flag icon now disappears on the next location update: the
  tracker verifies they're still a carrier and, if not, stops tracking and tells them to stop
  broadcasting (unless they're also an active bounty).

### Removed
- `/wb testsupplyalert` and `/wb teststolenalert` (dev-only fake-alert previews).
- `/wb resetsupply` (dev-only Supply Run state reset).

### Performance
- Reduced micro-stuttering during peer sync: the ledger sync digest is now computed
  time-sliced across frames, online-peer lookups are cached briefly, and HELLO handling uses the
  async digest — so busy comm traffic no longer causes frame spikes.
