Yeachan-Heo/oh-my-codex · error · Error
shutdown_shared_session_${kind.replaceAll(' ', '_')}_owner_c
Error message
shutdown_shared_session_${kind.replaceAll(' ', '_')}_owner_changed:${paneId} What it means
Thrown during shared-session shutdown when a pane's team owner tag does not match the expected owner (or is missing/unset). This prevents shutting down panes that belong to a different team or are unowned.
Source
Thrown at src/team/runtime.ts:5194
): FrozenSharedPaneAuthorization => {
const proof = readExactPaneProofSync(paneId);
if (proof.status !== 'live') {
throw new Error(`shutdown_shared_session_${kind.replaceAll(' ', '_')}_proof_unavailable:${paneId}`);
}
if (typeof expectedPid === 'number') {
if (!Number.isSafeInteger(expectedPid) || expectedPid <= 0) {
throw new Error(`shutdown_shared_session_${kind.replaceAll(' ', '_')}_pid_missing:${paneId}`);
}
if (proof.pid !== expectedPid) {
throw new Error(`shutdown_shared_session_${kind.replaceAll(' ', '_')}_identity_changed:${paneId}`);
}
}
const owner = readPaneTeamOwnerTagResult(paneId);
if (owner.status === 'error') {
throw new Error(`shutdown_shared_session_${kind.replaceAll(' ', '_')}_owner_unavailable:${paneId}:${owner.error}`);
}
if (owner.status !== 'value' || !tmuxPaneOwnerId || owner.value !== tmuxPaneOwnerId) {
throw new Error(`shutdown_shared_session_${kind.replaceAll(' ', '_')}_owner_changed:${paneId}`);
}
return { paneId, pid: proof.pid, owner: owner.value };
};
const assertSharedPaneAuthorizationContinuous = (
authorization: FrozenSharedPaneAuthorization,
kind: 'HUD pane' | 'restore leader pane',
): void => {
const scope = sharedSessionTopology ? 'shared_session' : 'detached_session';
const proof = readExactPaneProofSync(authorization.paneId);
if (proof.status !== 'live' || proof.pid !== authorization.pid) {
throw new Error(`shutdown_${scope}_${kind.replaceAll(' ', '_')}_identity_changed:${authorization.paneId}`);
}
const owner = readPaneTeamOwnerTagResult(authorization.paneId);
if (owner.status === 'error') {
throw new Error(`shutdown_${scope}_${kind.replaceAll(' ', '_')}_owner_unavailable:${authorization.paneId}:${owner.error}`);
}
const currentOwner = owner.status === 'value' ? owner.value : null;
if (currentOwner !== authorization.owner) {View on GitHub (pinned to 3ad79a8a6f)
Solutions
- Ensure only one team client performs shutdown for a given session/owner
- Re-tag or remove the foreign pane, then rerun shutdown
- Inspect tmux show-options -p -t <pane> @<owner-tag> to see current ownership
Defensive patterns
Strategy: validation
Validate before calling
const r = readPaneTeamOwnerTagResult(paneId); if (r.status !== 'value' || r.value !== tmuxPaneOwnerId) skip();
Prevention
- One owner per session; serialize shutdowns
- Never manually unset owner options on team panes
When it happens
Trigger: owner.status !== 'value', or tmuxPaneOwnerId is falsy, or owner.value !== tmuxPaneOwnerId — pane tag was cleared, retagged to another team, or the caller has no owner id.
Common situations: Pane was adopted/retagged by another concurrent team session; owner option manually deleted; racing shutdowns from two clients.
Related errors
- timed out waiting for tmux extended-keys lease lock: ${lockP
- shutdown_config_missing:${config.name}
- shutdown_shared_session_worker_owner_unavailable:${paneId}:$
- shutdown_shared_session_topology_unavailable:${sharedSession
- shutdown_shared_session_HUD_pane_identity_changed:${config.h
AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27).
Data as JSON: /api/errors/dcf2c737f039ae58.
Report an issue: GitHub.