[Bannerlord M2] Basic Campaign Actions — Move, Trade, Recruit #1094

Closed
opened 2026-03-23 16:49:24 +00:00 by perplexity · 1 comment
Collaborator

Parent: #1091
Benchmark gate: Level 2 (resource management) + Level 4 (trade routes) passed

Task

Timmy issues basic campaign commands via GABS: move between settlements, trade, recruit troops, engage bandits.

Steps:

  1. Enable GABS action tools in heartbeat loop
  2. Build decision prompt with game state context
  3. Implement action pipeline: observe → decide (local Qwen3) → act (GABS) → wait → repeat
  4. Error handling for failed actions
  5. Track party growth and gold accumulation

Key GABS tools: party/move_to_settlement, inventory/buy_item, party/recruit_all, party/engage_party

Done when: Timmy autonomously grows party from 20 to 100 troops and accumulates 10,000 gold.

Estimated effort: 2-3 weeks

**Parent:** #1091 **Benchmark gate:** Level 2 (resource management) + Level 4 (trade routes) passed ## Task Timmy issues basic campaign commands via GABS: move between settlements, trade, recruit troops, engage bandits. **Steps:** 1. Enable GABS action tools in heartbeat loop 2. Build decision prompt with game state context 3. Implement action pipeline: observe → decide (local Qwen3) → act (GABS) → wait → repeat 4. Error handling for failed actions 5. Track party growth and gold accumulation **Key GABS tools:** party/move_to_settlement, inventory/buy_item, party/recruit_all, party/engage_party **Done when:** Timmy autonomously grows party from 20 to 100 troops and accumulates 10,000 gold. **Estimated effort:** 2-3 weeks
claude was assigned by Rockachopa 2026-03-23 17:57:40 +00:00
Collaborator

PR created: http://143.198.27.163:3000/Rockachopa/Timmy-time-dashboard/pulls/1262

Fixed 3 failing bannerlord tests introduced by the WIP commit:

  1. test_run_stops_at_max_ticks / test_run_stops_when_m2_completeCampaignLoop.run() had a redundant local from bannerlord.gabs_client import GabsClient import that re-bound the name at runtime, bypassing the unittest.mock patch. Removed the duplicate import so the module-level binding is used.

  2. test_malformed_entries_skippedparse_campaign_state was creating NearbyParty objects with empty party_id for malformed entries like {"bad": "data"} (no exception was raised, so the catch block never fired). Added an explicit guard to skip entries missing a valid id field.

PR created: http://143.198.27.163:3000/Rockachopa/Timmy-time-dashboard/pulls/1262 Fixed 3 failing bannerlord tests introduced by the WIP commit: 1. **`test_run_stops_at_max_ticks` / `test_run_stops_when_m2_complete`** — `CampaignLoop.run()` had a redundant local `from bannerlord.gabs_client import GabsClient` import that re-bound the name at runtime, bypassing the `unittest.mock` patch. Removed the duplicate import so the module-level binding is used. 2. **`test_malformed_entries_skipped`** — `parse_campaign_state` was creating `NearbyParty` objects with empty `party_id` for malformed entries like `{"bad": "data"}` (no exception was raised, so the catch block never fired). Added an explicit guard to skip entries missing a valid `id` field.
claude was unassigned by Timmy 2026-03-24 01:56:08 +00:00
claude was assigned by Timmy 2026-03-24 01:59:29 +00:00
claude was unassigned by Timmy 2026-03-24 19:33:42 +00:00
Timmy closed this issue 2026-03-24 21:54:38 +00:00
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Rockachopa/Timmy-time-dashboard#1094