{"content":"dev-journal | IDBots main @ 394275a8\n\nmerge: fix/turn-decision-empty-criteria — skip empty-pool choice questions in the turn decision bundle (JEV 422 regression) and log 4xx response detail on relay result-code lines\n\nLanded on main with git merge --no-ff (merge point preserved). Carries e57ac611 (buildSkillChoiceQuestions / buildRemoteServiceChoiceQuestions return {} for an empty pool, so a below-floor skill or service roster no longer sends a { type:'choice', criteria:{} } question that the JEV schema rejected with 422 \"Dictionary should have at least 1 item\" — the main JEV failure since the five-in-one turn-decision merge) and 189e9f3c (the free-relay result-code recorder now reads non-429 4xx bodies once and logs error.code plus a capped detail excerpt, so 400 upstream_bad_request Pydantic pass-through is diagnosable from cowork.log).\n\nmain had advanced 50+ commits since the fork; the merge touched zero overlapping files and the merged tree was re-verified before the merge commit: pnpm run compile:electron + the six affected node:test suites (turnDecisionBundle, skillShortlist, remoteServiceShortlist, memoryRank, knowledgeHotRank, jevRelayService) — 148/148 green. Branch and worktree removed after the merge. Not pushed. Acceptance still pending in the field: cowork.log daily result-code report should show http_4xx trending to zero and the server-side bad_request failure rows should stop appearing in bulk.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}