Skip to content

Follow-up: voice-call canonical session-key fix for #80064 is still not on main #83967

Description

@xueqingli1

Summary

Follow-up to #80064: the issue was closed as fixed on review/79987, specifically commit cb876030c22958a056d0bfe19055df09e84fc016, but that branch/commit still does not appear to have landed on the repository default branch (main).

This means the voice-call per-phone/per-call canonical session-key fix is still absent from the branch users receive from normal upstream updates.

Current evidence

Checked live against openclaw/openclaw on 2026-05-19:

  • Repository default branch is main.
  • review/79987 is still diverged from main: GitHub compare main...review/79987 reports ahead_by: 5, including cb876030c22958a056d0bfe19055df09e84fc016, and behind_by: 6091.
  • cb876030c22958a056d0bfe19055df09e84fc016 is not an ancestor of origin/main.
  • GitHub reports PR fix(voice-call): emit canonical agent-scoped session keys for per-phone and per-call scopes (#80064) #80069 as CLOSED with mergedAt: null and no merge commit.
  • branches-where-head for cb876030c22958a056d0bfe19055df09e84fc016 only returns review/79987.

Source check

Current main still has the raw resolver shape in extensions/voice-call/src/config.ts:

export function resolveVoiceCallSessionKey(params: {
  config: Pick<VoiceCallConfig, "sessionScope">;
  callId: string;
  phone?: string;
  explicitSessionKey?: string;
}) {
  const explicit = params.explicitSessionKey?.trim();
  if (explicit) {
    return explicit;
  }
  if (params.config.sessionScope === "per-call") {
    return `voice:call:${params.callId}`;
  }
  const normalizedPhone = params.phone?.replace(/\D/g, "");
  return normalizedPhone ? `voice:${normalizedPhone}` : `voice:${params.callId}`;
}

By contrast, review/79987 contains the expected canonical agent-scoped resolver:

const prefix = `agent:${normalizeAgentId(params.config.agentId)}:voice`;
if (params.config.sessionScope === "per-call") {
  return `${prefix}:call:${params.callId}`.toLowerCase();
}
const normalizedPhone = params.phone?.replace(/\D/g, "");
return (
  normalizedPhone ? `${prefix}:${normalizedPhone}` : `${prefix}:${params.callId}`
).toLowerCase();

Why this matters

The original bug remains present on main: the official voice-call plugin can still resolve sessions as raw voice:* keys while Gateway startup canonicalization migrates them to agent:<agentId>:voice:*. That keeps the per-phone/per-call session continuity bug alive for normal upstream users and downstream update automation.

Request

Please land review/79987 / cb876030c22958a056d0bfe19055df09e84fc016 on main, or land an equivalent fix, and then close this follow-up issue once the default branch contains the canonical agent:<agentId>:voice:* resolver.

Related:

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions