Files
Lore Engine Dev 9bbbaa177d slice 5T.5: 4 example templates + end-to-end killer demo
Drop 4 templates into lore_engine_poc/seed/templates/:

* thieves_guild_mission.yaml (the original slice 14 example)
  4 queries: list_missions, get_mission, missions_by_target,
  active_missions. Payout / risk / secrecy enums.
* war_campaign.yaml
  3 queries: list_campaigns, campaigns_in_theater,
  ongoing_campaigns. Theater / aggressor / defender fields.
* black_market_lot.yaml
  3 queries: list_lots, market_prices, affordable_lots.
  Material / purity / asking_gp enums.
* npc_secret_knowledge.yaml
  3 queries: secrets_known_by, secrets_about_subject,
  list_secrets. Tier-gated content field.

And 1 instance file into lore_engine_poc/seed/instances/:

* crimson_hand_missions.yaml
  3 missions (CH-4471 / CH-4472 / CH-4473) with GIVEN_BY and
  TARGETS relations to slug endpoints in the Mardonari
  setting.

12 dedicated tests in test_e2e_demo.py cover:

* all 4 templates load cleanly from seed/templates/
* crimson_hand_missions.yaml ingests 3 entities + 6 relations
* list_missions / get_mission / active_missions return the
  expected rows
* list_template_tools discovers all 4 templates
* empty graph: list_campaigns returns []
* malformed instance file rejected with a clear error
* unknown template id rejected
* defining test: drop a new template file, reload(), the
  new tool appears (no code change)
* JSON-RPC dispatch: get_mission over the wire
* all 4 templates have no write tools (read-only surface)

The defining "killer demo" works end-to-end:
36 core tools + 14 template-generated = 50 total MCP tools
exposed by MCPServer after reload().

Suite: 700 -> 712 (+12).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 02:36:07 -04:00
..