From 81db962a9dabf225f956ef273455316b2ec4d358 Mon Sep 17 00:00:00 2001 From: Phillip Tarrant Date: Fri, 10 Jul 2026 13:30:45 -0500 Subject: [PATCH] fix(client): npc harness must set player.luck_descriptor (schema requires non-empty) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The throwaway harness hand-built a minimal canon log and left luck_descriptor as the default "", which fails the canon-log schema (minLength 1) → /npc/speak 422s and the harness silently degrades to fallback. Build the player through LogPlayer with a non-empty §7 fortune line. Verified: request now 200s and Fenn answers in-voice. Co-Authored-By: Claude Opus 4.8 (1M context) --- client/scripts/harness/npc_harness.gd | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/scripts/harness/npc_harness.gd b/client/scripts/harness/npc_harness.gd index a9de9d6..0162c67 100644 --- a/client/scripts/harness/npc_harness.gd +++ b/client/scripts/harness/npc_harness.gd @@ -33,8 +33,10 @@ func _ready() -> void: _game_state = GameState.new() _canon_log = CanonLog.new() _canon_log.set_location("greywater_docks", "Greywater Docks") - _canon_log.player.name = "Aldric" - _canon_log.player.class_id = "sellsword" + # Build the player through LogPlayer so luck_descriptor is non-empty — the + # canon-log schema requires it (minLength 1), and it's the §7 fortune line + # the digest surfaces to the NPC. An empty string here 422s the request. + _canon_log.player = LogPlayer.new("Aldric", "sellsword", "the dice are kind today") # Deliberately no find_the_ledger quest here — leave it un-started so Fenn # can offer_quest it during the conversation.