This source declares shared-runtime-v1 and stateless-v1. It is not certified
and is not a claim of live acceptance. The exact archive requires independent
review, signer approval, and two-Workspace invocation acceptance.
get_language()resolves the language from the invocation snapshot (self.get_config()) on every call. It is never captured ininitialize()or in an instance field, so two installations of the same artifact digest render their own language through one process object graph.initialize()is no longer overridden: this plugin has no process-scoped initialization and therefore no place where an (empty) shared config could be mistaken for tenant configuration. Dedicated placement still works: inside a command invocation the SDK binds the installation config, and outside oneget_config()falls back to the instance config the dedicated worker set.- Every command renders through
get_text(self.plugin.get_language(), ...); nothing is stored on the plugin or the command objects.
- The plugin-root
i18nmodule is still imported as a top-level module namedi18n(the layout the plugin ships with), but thesys.pathentry that makes it importable is now added once, in the guarded, idempotent insertion incomponents/__init__.py(a package initializer runs exactly once per process, before any command module body). The six command modules do not mutatesys.pathat import time any more. - One artifact digest runs in its own worker process, so the top-level
i18nname cannot be shadowed by another plugin.
- Nothing. The plugin keeps no tenant state in process memory, so
on_installation_revoked()is intentionally not overridden: there is no cache or task registry to release. All tenant data (conversations, plugin/tool manifests) comes from Host APIs inside the invocation.
languagemust be a key ofi18n.TRANSLATIONS(en_US,zh_Hans); other values fall back toen_USinsideget_text.- The
cmd/func/pluginlistings index the other plugins' manifestmetadata.descriptiondict by the invocation language. A manifest that does not provide that language raisesKeyError(pre-existing behaviour, unchanged by this revision). - No certification claim is made here.
tests/test_shared_runtime.py drives two installation bindings through one
plugin object and its real Reset / Help command components with the real SDK
bind_invocation + InstallationBinding envelope: each installation renders
its own language, the shared plugin object keeps no tenant attribute, and
importing all six command modules adds at most one sys.path entry (the package
initializer's). Every assertion in that file was executed against revision
0.1.9 and fails there.