Repository navigation
v1.0.0: cherry-pick #5077 and #5078 onto the release branch - #5086
Conversation
On macOS, zoneinfo resolves a key such as europe/warsaw through the case-insensitive APFS tz database, so the server accepted it where Linux rejects it, and test_get_current_time_errors failed locally. Check each key against available_timezones() in the tool path and in the --local-timezone validation. Closes #5060 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com> (cherry picked from commit d52c223) Signed-off-by: cliffhall <cliff@futurescale.com>
Node 26 appends the file path to the EISDIR read error, so the exact-match assertion in persistence.test.ts failed there. Expect the suffixed text on Node 26 and later and the bare text before, keeping the exact match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com> (cherry picked from commit d7388c6) Signed-off-by: cliffhall <cliff@futurescale.com>
The cherry-pick of d52c223 (#5077) comes from the SDK v2 tree, where the exception is MCPError. On v2/release/1.0.0 the server raises mcp.shared.exceptions.McpError, already imported by this test module. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
|
There was a problem hiding this comment.
🟢 Approval recommended
The focused changes match the linked issues and include appropriate regression coverage and documentation.
0 open findings
What changed in this PR
Cherry-picks two milestone fixes onto the one-time v1.0.0 release branch.
Changes:
- Enforces exact, case-sensitive IANA timezone keys and documents the behavior.
- Adds timezone validation regression coverage.
- Updates the memory persistence test for Node 26’s
EISDIRmessage.
| File | Description |
|---|---|
src/time/src/mcp_server_time/server.py |
Adds cached exact-key timezone validation. |
src/time/tests/test_server.py |
Tests rejection of unlisted timezone keys. |
src/time/tests/test_protocol.py |
Covers lowercase CLI timezone rejection. |
src/time/README.md |
Documents exact-key requirements. |
src/memory/__tests__/persistence.test.ts |
Handles Node-version-specific EISDIR text. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
|
Copilot round 1: clean (0 findings, approval recommended). Loop ended on the first clean round; merged. |
Part of #5080
Description
Cherry-picks the two milestone fixes that merged to
v2/mainafter the cut, so they ship in 1.0.0:d52c2231(time: accept only exact IANA timezone keys on every platform #5077, closes time: test_get_current_time_errors fails on macOS (case-insensitive tz database) #5060): the time server accepts a timezone only when it is an exact IANA key, case included, on every platform. On macOS,zoneinforesolvedeurope/warsawthrough the case-insensitive APFS tz database.d7388c64(memory: expect Node 26's path-suffixed EISDIR message in persistence test #5078, closes memory: persistence EISDIR test fails on Node 26 (version-dependent error message) #5076): the memory persistence test expects Node 26's path-suffixedEISDIRmessage (test only).Both applied cleanly (
git cherry-pick -x). One adaptation commit follows: the #5077 test came from the SDK v2 tree, where the exception isMCPError; on this branch it is SDK 1.x'sMcpError, which the module already imports. The server change itself needed none.Server Details
get_zoneinfo/--local-timezonevalidation, README note; testsMotivation and Context
#5060 and #5076 are in the v1.0.0 milestone; their fixes merged after the SDK v2 migration, which v1.0.0 no longer includes.
How Has This Been Tested?
Client evidence for #5060 (the time server over stdio rejecting
europe/warsawand acceptingEurope/Warsaw) is in the release ledger, re-run against this branch's tree.Breaking Changes
None beyond the fix: a non-exact timezone key that only resolved on case-insensitive filesystems is now rejected there, as it always was on Linux.
Types of changes
Checklist
🤖 Generated with Claude Code