microsoft / microsoft/work-iq

CopilotConversation400Error for all users whose Windows timezone is FLE Standard Time (Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius).

Open
#83 3 comments 8 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
PowerShell
Stars
1k
Forks
132
Avg merge
5d 19h
Merged PRs (30d)
6

Description

Summary

WorkIQ fails with CopilotConversation400Error for all users whose Windows timezone is FLE Standard Time (Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius). The bundled .NET 10 runtime maps this to the IANA name Europe/Kyiv, which the Microsoft Graph Copilot Chat API rejects as invalid.

This is the same root cause as #54 (closed without a product fix). That issue affected a user in Bulgaria; investigation confirms it affects the entire FLE Standard Time timezone covering 6 European capitals. The workaround of changing the Windows timezone is disruptive and should not be the permanent solution.

Environment

  • WorkIQ version: 0.4.0.16790
  • OS: Windows 11 (Build 26200)
  • Node.js: v20.11.0
  • .NET runtime (bundled): 10.0.3
  • Windows timezone: FLE Standard Time — (UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius

Steps to Reproduce

  1. Set Windows timezone to FLE Standard Time:
    Set-TimeZone -Id "FLE Standard Time"
    
  2. Run any WorkIQ query:
    workiq ask -q "hello"
    
  3. Observe error:
    Error: Unexpected error: Exception of type 'ApiSdk.Models.CopilotConversation400Error' was thrown.
    

Root Cause (HTTP traffic capture)

Captured via mitmproxy. WorkIQ successfully creates a conversation (POST /beta/copilot/conversations → 201), then sends:

POST /beta/copilot/conversations/{id}/chat
{
  "contextualResources": { "files": [], "webContext": { "isWebEnabled": false } },
  "locationHint": { "timeZone": "Europe/Kyiv" },
  "message": { "text": "hello" }
}

The API responds 400 Bad Request:

{
  "error": {
    "code": "badRequest",
    "message": "The timeZone field within locationHint is not in correct IANA format."
  }
}

Europe/Kyiv is a valid IANA timezone name (canonical since IANA tzdb 2022b, replacing Europe/Kiev). The .NET 10 runtime uses updated ICU data that correctly maps FLE Standard TimeEurope/Kyiv. However, the Copilot Chat API backend has stale timezone data and only recognizes the deprecated name Europe/Kiev.

Impact

  • Affects all users in Helsinki, Kyiv, Riga, Sofia, Tallinn, and Vilnius timezones
  • Both CLI (workiq ask) and MCP server (workiq mcp) are broken
  • The error message gives zero indication of a timezone issue — extremely difficult to diagnose without HTTP traffic capture
  • At least 3 users have independently hit this (#54, a Microsoft employee in #54 comments, and this report)

Workaround

Change Windows timezone to GTB Standard Time (Athens, Bucharest) — same UTC+2 offset and EU DST rules:

Set-TimeZone -Id "GTB Standard Time"

Suggested Fix

WorkIQ should normalize timezone names before sending them to the API. The CLDR/ICU backward compatibility file maps modern names to their legacy equivalents. At minimum:

Modern IANA name Legacy name (API-compatible)
Europe/Kyiv Europe/Kiev
Asia/Ho_Chi_Minh Asia/Saigon
Asia/Kolkata Asia/Calcutta
Pacific/Pohnpei Pacific/Ponape

This is a one-line fix in the timezone resolution code — check if the resolved IANA name has a backward-compatible alias and prefer that when calling the Copilot API.

Additionally, the Copilot Chat API team should update their timezone validation to accept current IANA canonical names.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating WorkIQ's timezone resolution and the code that builds the Copilot chat request's locationHint. Reproduce with Set-TimeZone -Id "FLE Standard Time" and workiq ask -q "hello", then verify that both CLI and MCP requests use an API-compatible timezone and no longer receive the 400 response.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, powershell
Domain
api, backend, cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.