Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

Swap GLM 5.3 Flash in for Kimi K3 on crm-updater/strategist/next-steps (staging)

merged#2861CedarCopilot

CedarCopilot wants to merge 1 commit into staging from feat/glm-crm-updater-strategist-next-steps

Live on prod, watching, 1 day leftTimeline and evidence
  1. Opened
    Sep 21, 2026, 1:59 PM
  2. Sep 21, 2026, 2:04 PM
  3. Merged
    Sep 21, 2026, 4:32 PM
  4. Live on prod
    Sep 21, 2026, 4:32 PM
  5. Observed 4 hours
    Sep 21, 2026, 4:32 PM
  6. Watching

    Live on prod, watching, 1 day left

    Sep 21, 2026, 4:32 PM
  7. Pipelines steady after this deploy
    Sep 21, 2026, 4:32 PM

Behaviors Libra is checking

When the CRM updater uses the OSS/Understudy route, conversation-field updates run on GLM 5.3 Flash instead of Kimi K3, including the shared crm-updater-haiku branch.Not checked
prod
When next-steps task updates use the OSS/Understudy route, the next-steps agent runs on GLM 5.3 Flash instead of Kimi K3 and can complete its real tool-call loop.Not checked
prod
When the strategist uses the OSS/Understudy route, strategist updates run on GLM 5.3 Flash instead of Kimi K3 while retaining the existing multi-step tool workflow.Not checked
prod

Libra has verdicts on 0 of 3 tracked behaviors on prod; 3 are still being checked. Libra checks hourly for 3 days after each deploy.

Summary

  • Adds GLM_MODEL = 'glm-5.3-flash' to services/llm/models.ts (routed via Understudy exactly like SOL_MODEL/KIMI_MODEL, family: 'openai', never direct).
  • Swaps the three -oss call sites currently on Kimi K3 over to GLM: crm-updater (which crm-updater-haiku shares a model branch with), strategist, next-steps.
  • Staging-only comparison , no workload rename or PostHog flag change needed. -oss workload names are model-agnostic, and cedar-oss-system-subagents is already active for <email> / <email>, so this takes effect immediately on deploy to staging.

Why GLM, and why it's safe here

Same rigor applied after the earlier Sol reasoning_effort incident (PR #2850): confirmed with standalone scripts against the real Understudy gateway, not just a typecheck.

  • glm-5.3-flash produces real tool_calls (not text-embedded pseudo-XML) both with and without an explicit reasoning_effort: 'none'.
  • Completes a clean multi-step tool-call → tool-result → final-answer loop.
  • Unlike Kimi K3 (which silently breaks tool-calling if reasoningEffort: 'none' is set) GLM has no known sensitivity to that provider option either way, so the existing THINKING_DISABLED_PROVIDER_OPTIONS at each call site is left unchanged.

Test plan

  • pnpm --filter @zero/server run types , clean
  • pnpm deps:check , no violations
  • Targeted vitest run across the 16 test files covering these three modules , 216/216 passed
  • Standalone script confirmation of GLM tool-calling behavior against the live Understudy gateway (both with and without reasoning_effort: 'none')
  • Staging traffic spot-check once deployed (flag is already on for isabelle/jesse)

🤖 Generated with Claude Code

https://claude.ai/code/session_012WwyQEcVnYQzkB4Fxsfpx6

RetriggerConfidence Score: 5/5

The PR appears safe to merge as a staging-only model substitution with unchanged routing and workload contracts.

Summary

This PR introduces the Understudy-routed glm-5.3-flash model and switches three staging OSS agent paths from Kimi K3 to GLM while retaining their existing feature flags, workloads, provider options, and tool restrictions.

  • Adds and re-exports the shared GLM_MODEL identifier.
  • Updates CRM field updater, strategist, and next-steps OSS model selection.
  • Leaves direct Anthropic routes and workload-based observability unchanged.

Diagram

rendering diagram…

Reviews (1) · Last reviewed commit: "Swap GLM 5.3 Flash in for Kimi K3 on crm..."

Show production surfaces and changed-file mapping

Production surfaces

Libra has not measured any production surfaces for this change yet.

Changed files → surfaces

  • apps/server/src/mastra/tools/task/updateNextStepsAndTasksTool.tsno production surface mapped
  • apps/server/src/mastra/utils/conversation-field-updates.tsno production surface mapped
  • apps/server/src/mastra/utils/strategist-updates.tsno production surface mapped
  • apps/server/src/services/llm/models.tsno production surface mapped
  • apps/server/src/services/llm/resolve-model.tsno production surface mapped