Skip to content

Python SDK treats model/verification and guardianWarning app-server notifications as UnknownNotification #19348

@chanwooyang1

Description

@chanwooyang1

What issue are you seeing?

The Python app-server SDK treats two typed v2 app-server notifications as UnknownNotification:

  • model/verification
  • guardianWarning

These notifications are defined and emitted by the Rust app-server protocol. The JSON/TypeScript schema also includes both variants.

However, the generated Python SDK currently does not expose ModelVerificationNotification or GuardianWarningNotification in generated/v2_all.py, and generated/notification_registry.py has no entries for either method. As a result, AppServerClient._coerce_notification() falls back to UnknownNotification.

This can cause Python SDK clients to miss typed handling for safety/account verification or guardian warning notifications.

What steps can reproduce the bug?

From the repo root:

PYTHONPATH=sdk/python/src python3 - <<'PY'
from codex_app_server.client import AppServerClient
from codex_app_server.models import UnknownNotification

client = object.__new__(AppServerClient)

notif = client._coerce_notification(
    "model/verification",
    {"threadId": "t", "turnId": "u", "verifications": ["trustedAccessForCyber"]},
)
print(type(notif.payload).__name__, isinstance(notif.payload, UnknownNotification))

warning = client._coerce_notification(
    "guardianWarning",
    {"threadId": "t", "message": "m"},
)
print(type(warning.payload).__name__, isinstance(warning.payload, UnknownNotification))
PY

Actual output:

UnknownNotification True
UnknownNotification True

What is the expected behavior?

The Python SDK should expose typed payload models for both notifications and register them in NOTIFICATION_MODELS:

  • model/verification -> ModelVerificationNotification
  • guardianWarning -> GuardianWarningNotification

Then _coerce_notification() should return typed notification payloads instead of UnknownNotification.

Additional information

Relevant files:

  • codex-rs/app-server-protocol/src/protocol/common.rs
  • codex-rs/app-server-protocol/src/protocol/v2.rs
  • codex-rs/app-server/src/bespoke_event_handling.rs
  • codex-rs/app-server-protocol/schema/json/ServerNotification.json
  • codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts
  • sdk/python/src/codex_app_server/generated/v2_all.py
  • sdk/python/src/codex_app_server/generated/notification_registry.py
  • sdk/python/src/codex_app_server/client.py
  • sdk/python/scripts/update_sdk_artifacts.py

I checked for existing issues/PRs and did not find an exact duplicate.

Related but not duplicate:

A narrow fix could update the Python SDK generation path so these notification payload models are generated and registered, plus add a small Python SDK regression test for _coerce_notification().

If maintainers agree this is the right scope and invite a PR, I’d be happy to prepare a focused fix.

Metadata

Metadata

Assignees

No one assigned

    Labels

    app-serverIssues involving app server protocol or interfacesbugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions