AI implementation contract (normative)
This is a machine-oriented engineering contract, not a replacement for the human README. The Japanese AGENTS.md is authoritative. Do not redesign the system from inference.
One shared
DeviceProxyis only a factory: map a unique device-class name to a registered callablecreator. No transport abstraction, backend registry, automatic discovery, entry points, or device database.The HTTP (
ese774_frame), gRPC (grpc_frame), and Tango (tango_frame) packages remain independent. This package imports none of them at runtime.Device packages own their dedicated client classes and their
.pyisignatures. Client-side overrides and additions must be reflected in those dedicated stubs; never substitute a generic base client’s stub.HTTP/gRPC may have separate sync and async dedicated clients.
make_async_sync_factoryselects between them; the sharedDeviceProxydoes not interpretasync_mode. Tango is not forced into this pair model.Constructor arguments,
config,api_spec, and connection details belong to the device/framework. The shared factory forwards them unchanged.A device package may expose direct clients, its own
DeviceProxy, and the sharedDeviceProxy. These options coexist; their registries are not automatically merged.Registration must be explicit Python execution. Import-time registration is optional, not mandatory. Duplicate device-class names are rejected.
For common
DeviceProxytyping, maintain an explicit JSON map from device-class names to the fully qualified dedicated client classes. Runtyping_generatorto generatesrc/device_proxy_factory/core.pyi. The generator only imports class names in the stub; it does not copy or regenerate client API declarations.Python type checkers do not automatically merge overloads from different packages. Updating
core.pyiand rebuilding/reinstalling the common package is required when the set of typed devices changes. Installed client packages must be available for type resolution. This is a known limitation, not a feature to conceal.Preserve Python 3.7 support and Japanese code comments. Never invent actual class names. Review the real HTTP/gRPC/Tango sources and existing stub generators before modifications.
Validate runtime multi-device operation, duplicate registration, argument forwarding, and static resolution of overridden client methods. Keep README and Japanese/English Pages in sync.