Skip to content
This repository was archived by the owner on Oct 26, 2026. It is now read-only.

fix(i18n): console copy names the system the user is in, not the cloud noun (objectui#12956) - #12959

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-12956-console-copy-system
Oct 18, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-12956-console-copy-system

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #12956
Clause-②: no

What changed

Inside a running deployment the console stops calling itself "this environment" / 「此环境 / 本环境」 (objectstack-ai/cloud#3002, ruling A). Every value in the card's named families that said so now says "this system" / 「本系统」, or drops the noun where the sentence reads without it. All ten packs follow. No key is renamed, added or removed (all-locales-key-parity green).

  • The Settings category label (console.settingsHub.categories.Workspace, the manifest category that holds Company, Branding and Localization) reads "General" / 「常规」, the plainest name for what is configured there and not another cloud noun. Each pack uses the word it already uses for organization.settings.generalTitle.
  • Omitted rather than replaced where the sentence reads without the noun: the sign-in-directly sentences (auth.setPassword.description, home.recoveryReminder.message in zh only, since en never named it), the three profile.password.* descriptions, and home.loading ("Loading…" / 「加载中…」).
  • home.loading joined the merged Loading… group that ellipsis-glyph-3878.test.ts pins for per-language uniformity, because its en value is now exactly Loading…. zh and ko take the group's existing rendering (「加载中…」, 「로딩 중…」), and the pinned member list grows by that one key.
  • Inline English defaults follow en. pnpm check:i18n-keys refuses an inline defaultValue that differs from the en value it falls back for, so the call sites' literals moved with en (see Deviations).

A1: every value in the named families, per pack

Families: console.settingsHub, console.workspaceTimezonePrompt, console.readRate, auth.*, profile.password, home.*, connectAgent, aiModelStatus. Enumerated from the loaded packs (every string under each family, matched for the noun in each pack's script), not from line numbers. 22 keys change in all ten packs, plus home.recoveryReminder.message in zh only: 221 values. Every hit in these families changed; there is no "keep" row.

key zh before zh after en before en after
console.settingsHub.subtitle 配置环境、集成与功能开关。 配置系统、集成与功能开关。 Configure your environment, integrations, and feature flags. Configure your system, integrations, and feature flags.
console.settingsHub.categories.Workspace 环境 常规 Environment General
console.workspaceTimezonePrompt.title 设置环境时区 设置系统时区 Set the environment timezone Set the system timezone
console.workspaceTimezonePrompt.description 此环境仍在使用平台默认时区 {{current}}。环境时区决定公式中“今天”的含义、报表如何按日期分组,以及日期和时间如何显示,对环境内所有人生效。下方已填入你的浏览器时区。 本系统仍在使用平台默认时区 {{current}}。系统时区决定公式中“今天”的含义、报表如何按日期分组,以及日期和时间如何显示,对系统内所有人生效。下方已填入你的浏览器时区。 This environment still uses the platform default timezone, {{current}}. The environment timezone decides what "today" means in formulas, how reports group dates and how dates and times are shown, for everyone in the environment. Your browser timezone is filled in below. This system still uses the platform default timezone, {{current}}. The system timezone decides what "today" means in formulas, how reports group dates and how dates and times are shown, for everyone in the system. Your browser timezone is filled in below.
console.workspaceTimezonePrompt.saved 环境时区已设置为 {{zone}} 系统时区已设置为 {{zone}} Environment timezone set to {{zone}} System timezone set to {{zone}}
console.readRate.ratioTitle 本环境读取量异常 本系统读取量异常 Unusual read volume in this environment Unusual read volume in this system
console.readRate.noWritesTitle 本环境只有读取、完全没有写入 本系统只有读取、完全没有写入 Reads with no writes at all in this environment Reads with no writes at all in this system
auth.register.errors.selfRegistrationClosed 本环境未开放自助注册,请联系管理员获取邀请。 本系统未开放自助注册,请联系管理员获取邀请。 Self-registration is not open on this environment. Ask an administrator for an invitation. Self-registration is not open on this system. Ask an administrator for an invitation.
auth.setPassword.description 您是通过单点登录进入的。设置一个本地密码,这样即使单点登录不可用,您仍能直接登录此环境。 您是通过单点登录进入的。设置一个本地密码,这样即使单点登录不可用,您仍能直接登录。 You signed in via single sign-on. Set a local password so you can still sign in to this environment directly if SSO ever becomes unavailable. You signed in via single sign-on. Set a local password so you can still sign in directly if SSO ever becomes unavailable.
auth.verifyEmail.resendUnavailable 此环境可能未配置邮件发送服务。如果问题持续存在,请联系支持。 本系统可能未配置邮件发送服务。如果问题持续存在,请联系支持。 Email delivery may not be configured for this environment. Contact support if this persists. Email delivery may not be configured for this system. Contact support if this persists.
auth.shell.tenantHostHint 您正在登录此环境 您正在登录本系统 You are signing in to this environment You are signing in to this system
profile.password.changeDescription 更新您在此环境登录所用的密码。 更新您登录所用的密码。 Update the password you use to sign in to this environment. Update the password you use to sign in.
profile.password.setDescription 您通过单点登录进入。设置本地密码后,也可以在此环境使用邮箱和密码登录。 您通过单点登录进入。设置本地密码后,也可以使用邮箱和密码登录。 You signed in via single sign-on. Set a local password to also sign in with email and password on this environment. You signed in via single sign-on. Set a local password to also sign in with email and password.
profile.password.localSet 本地密码已设置。现在您可以在此环境使用邮箱和密码登录。 本地密码已设置。现在您可以使用邮箱和密码登录。 Local password set. You can now sign in with email and password on this environment. Local password set. You can now sign in with email and password.
home.build.noCapability 此环境不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。 本系统不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。 Building apps isn't available in this environment — it requires the “Manage Metadata” permission, which your account doesn't have. Building apps isn't available in this system — it requires the “Manage Metadata” permission, which your account doesn't have.
home.loading 正在加载环境… 加载中… Loading environment… Loading…
home.noAppsDescription 环境正在准备中——管理员共享给你的应用会显示在这里。 系统正在准备中——管理员共享给你的应用会显示在这里。 Your environment is being set up — apps your admin shares with you will show up here. The system is being set up — apps your admin shares with you will show up here.
home.recoveryReminder.message 建议设置一个备用密码,这样即使单点登录不可用,你仍能直接登录此环境。 建议设置一个备用密码,这样即使单点登录不可用,你仍能直接登录。 (unchanged: does not name the environment)
home.quickActions.systemSettingsDesc 配置您的环境 配置您的系统 Configure your environment Configure your system
connectAgent.url.title 本环境的 MCP 端点 本系统的 MCP 端点 This environment's MCP endpoint This system's MCP endpoint
connectAgent.url.skillHint 可移植的智能体技能文件:教会任何支持技能的智能体如何使用本环境。 可移植的智能体技能文件:教会任何支持技能的智能体如何使用本系统。 The portable agent skill: teaches any skills-capable agent how to work with this environment. The portable agent skill: teaches any skills-capable agent how to work with this system.
aiModelStatus.readFailed 无法读取有效 AI 模型。该环境可能未运行 AI 服务,或你没有 ai:read 权限。 无法读取有效 AI 模型。本系统可能未运行 AI 服务,或你没有 ai:read 权限。 Couldn't read the effective AI model. This environment may not run an AI service, or you may lack the ai:read permission. Couldn't read the effective AI model. This system may not run an AI service, or you may lack the ai:read permission.
aiModelStatus.readFailedWithStatus 无法读取有效 AI 模型(HTTP {{status}})。该环境可能未运行 AI 服务,或你没有 ai:read 权限。 无法读取有效 AI 模型(HTTP {{status}})。本系统可能未运行 AI 服务,或你没有 ai:read 权限。 Couldn't read the effective AI model (HTTP {{status}}). This environment may not run an AI service, or you may lack the ai:read permission. Couldn't read the effective AI model (HTTP {{status}}). This system may not run an AI service, or you may lack the ai:read permission.
key de fr es pt ru ja ko ar
console.settingsHub.subtitle Konfigurieren Sie Ihr System, Integrationen und Feature-Flags. Configurez votre système, vos intégrations et vos indicateurs de fonctionnalité. Configure su sistema, las integraciones y los indicadores de funciones. Configure seu sistema, integrações e sinalizadores de recursos. Настройте систему, интеграции и флаги функций. システム、連携、機能フラグを設定します。 시스템, 연동, 기능 플래그를 구성합니다. اضبط النظام والتكاملات وأعلام الميزات.
console.settingsHub.categories.Workspace Allgemein Général General Geral Общие 一般 일반 عام
console.workspaceTimezonePrompt.title Zeitzone des Systems festlegen Définir le fuseau horaire du système Configure la zona horaria del sistema Definir o fuso horário do sistema Задайте часовой пояс системы システムのタイムゾーンを設定 시스템 시간대 설정 تعيين المنطقة الزمنية للنظام
console.workspaceTimezonePrompt.description Dieses System verwendet noch die Standardzeitzone der Plattform, {{current}}. Die Zeitzone des Systems bestimmt, welcher Tag in Formeln als heute gilt, wie Berichte nach Datum gruppieren und wie Datum und Uhrzeit angezeigt werden – für alle im System. Unten ist die Zeitzone Ihres Browsers eingetragen. Ce système utilise encore le fuseau horaire par défaut de la plateforme, {{current}}. Le fuseau horaire du système détermine ce que signifie « aujourd’hui » dans les formules, la façon dont les rapports regroupent les dates et l’affichage des dates et des heures, pour tous les utilisateurs du système. Le fuseau horaire de votre navigateur est renseigné ci-dessous. Este sistema aún usa la zona horaria predeterminada de la plataforma, {{current}}. La zona horaria del sistema determina qué significa «hoy» en las fórmulas, cómo agrupan los informes por fecha y cómo se muestran las fechas y horas, para todos en el sistema. Abajo se indica la zona horaria de su navegador. Este sistema ainda usa o fuso horário padrão da plataforma, {{current}}. O fuso horário do sistema define o que "hoje" significa nas fórmulas, como os relatórios agrupam por data e como datas e horas são exibidas, para todos no sistema. O fuso horário do seu navegador foi preenchido abaixo. В этой системе всё ещё используется часовой пояс платформы по умолчанию — {{current}}. Часовой пояс системы определяет, что означает «сегодня» в формулах, как отчёты группируют данные по датам и как отображаются дата и время, — для всех в системе. Ниже указан часовой пояс вашего браузера. このシステムは、まだプラットフォームの既定のタイムゾーン({{current}})を使用しています。システムのタイムゾーンは、数式での「今日」の意味、レポートの日付ごとのグループ化、日付と時刻の表示方法を決め、システムの全員に適用されます。下にブラウザーのタイムゾーンを入力しています。 이 시스템은 아직 플랫폼 기본 시간대({{current}})를 사용하고 있습니다. 시스템 시간대는 수식에서 "오늘"의 의미, 보고서의 날짜별 그룹화, 날짜와 시간의 표시 방식을 결정하며 시스템의 모든 사용자에게 적용됩니다. 아래에 브라우저 시간대가 입력되어 있습니다. لا يزال هذا النظام يستخدم المنطقة الزمنية الافتراضية للمنصة، {{current}}. تحدد المنطقة الزمنية للنظام معنى "اليوم" في الصيغ، وكيفية تجميع التقارير حسب التاريخ، وكيفية عرض التواريخ والأوقات، لجميع مستخدمي النظام. تم إدخال المنطقة الزمنية لمتصفحك أدناه.
console.workspaceTimezonePrompt.saved Zeitzone des Systems auf {{zone}} festgelegt Fuseau horaire du système défini sur {{zone}} Zona horaria del sistema configurada en {{zone}} Fuso horário do sistema definido como {{zone}} Часовой пояс системы: {{zone}} システムのタイムゾーンを {{zone}} に設定しました 시스템 시간대를 {{zone}}(으)로 설정했습니다 تم تعيين المنطقة الزمنية للنظام إلى {{zone}}
console.readRate.ratioTitle Ungewöhnliches Lesevolumen in diesem System Volume de lecture inhabituel dans ce système Volumen de lectura inusual en este sistema Volume de leitura incomum neste sistema Необычный объём чтения в этой системе このシステムの読み取り量が異常です 이 시스템의 읽기 양이 비정상적입니다 حجم قراءة غير معتاد في هذا النظام
console.readRate.noWritesTitle Lesevorgänge ganz ohne Schreibvorgänge in diesem System Lectures sans aucune écriture dans ce système Lecturas sin ninguna escritura en este sistema Leituras sem nenhuma gravação neste sistema Чтение вообще без записи в этой системе このシステムは読み取りのみで書き込みがまったくありません 이 시스템은 읽기만 있고 쓰기가 전혀 없습니다 قراءات بدون أي كتابة في هذا النظام
auth.register.errors.selfRegistrationClosed Die Selbstregistrierung ist in diesem System nicht möglich. Bitten Sie einen Administrator um eine Einladung. L'inscription libre n'est pas ouverte sur ce système. Demandez une invitation à un administrateur. El registro por cuenta propia no está abierto en este sistema. Solicite una invitación a un administrador. O cadastro por conta própria não está aberto neste sistema. Peça um convite a um administrador. Самостоятельная регистрация в этой системе закрыта. Обратитесь к администратору за приглашением. このシステムではセルフ登録を受け付けていません。管理者に招待を依頼してください。 이 시스템에서는 직접 가입을 받지 않습니다. 관리자에게 초대를 요청하세요. التسجيل الذاتي غير متاح في هذا النظام. اطلب دعوة من المسؤول.
auth.setPassword.description Sie haben sich über Single Sign-on angemeldet. Legen Sie ein lokales Passwort fest, damit Sie sich weiterhin direkt anmelden können, falls SSO einmal nicht verfügbar ist. Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local afin de pouvoir toujours vous connecter directement si le SSO devenait indisponible. Ha iniciado sesión mediante inicio de sesión único. Establezca una contraseña local para poder seguir accediendo directamente si el SSO deja de estar disponible. Você entrou por logon único. Defina uma senha local para continuar conseguindo entrar diretamente caso o SSO fique indisponível. Вы вошли через единый вход. Задайте локальный пароль, чтобы входить напрямую, если SSO станет недоступен. シングルサインオンでサインインしました。SSO が利用できなくなったときにも直接サインインできるよう、ローカルパスワードを設定してください。 싱글 사인온으로 로그인했습니다. SSO를 사용할 수 없게 되더라도 직접 로그인할 수 있도록 로컬 비밀번호를 설정하세요. لقد سجّلت الدخول عبر الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن من الدخول مباشرةً إذا أصبح الدخول الموحّد غير متاح.
auth.verifyEmail.resendUnavailable Für dieses System ist möglicherweise kein E-Mail-Versand konfiguriert. Kontaktieren Sie den Support, wenn das Problem bestehen bleibt. L'envoi d'e-mails n'est peut-être pas configuré pour ce système. Contactez le support si le problème persiste. Puede que el envío de correos no esté configurado en este sistema. Contacte soporte si el problema persiste. O envio de e-mails pode não estar configurado neste sistema. Entre em contato com o suporte se o problema persistir. Возможно, отправка писем не настроена для этой системы. Если проблема повторяется, обратитесь в поддержку. このシステムではメール配信が設定されていない可能性があります。問題が続く場合はサポートに連絡してください。 이 시스템에서는 이메일 발송이 구성되지 않았을 수 있습니다. 문제가 계속되면 지원팀에 문의하세요. قد يكون إرسال البريد الإلكتروني غير مُهيأ في هذا النظام. تواصل مع الدعم إذا استمرت المشكلة.
auth.shell.tenantHostHint Sie melden sich bei diesem System an Vous vous connectez à ce système Está iniciando sesión en este sistema Você está fazendo login neste sistema Вы входите в эту систему このシステムにサインインしています 이 시스템에 로그인하는 중입니다 تسجل الدخول إلى هذا النظام
profile.password.changeDescription Aktualisieren Sie das Passwort, mit dem Sie sich anmelden. Mettez à jour le mot de passe que vous utilisez pour vous connecter. Actualice la contraseña que usa para iniciar sesión. Atualize a senha que você usa para entrar. Обновите пароль, который вы используете для входа. サインインに使用するパスワードを更新します。 로그인할 때 사용하는 비밀번호를 업데이트하세요. قم بتحديث كلمة المرور التي تستخدمها لتسجيل الدخول.
profile.password.setDescription Sie haben sich per Single Sign-On angemeldet. Legen Sie ein lokales Passwort fest, um sich auch mit E-Mail und Passwort anmelden zu können. Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local pour pouvoir également vous connecter avec votre e-mail et un mot de passe. Inició sesión mediante inicio de sesión único. Establezca una contraseña local para poder iniciar sesión también con correo y contraseña. Você entrou via logon único (SSO). Defina uma senha local para também poder entrar com e-mail e senha. Вы вошли через единый вход (SSO). Задайте локальный пароль, чтобы также входить по электронной почте и паролю. シングルサインオンでサインインしています。ローカルパスワードを設定すると、メールアドレスとパスワードでもサインインできます。 통합 인증(SSO)으로 로그인하셨습니다. 로컬 비밀번호를 설정하면 이메일과 비밀번호로도 로그인할 수 있습니다. لقد سجّلت الدخول عبر تسجيل الدخول الموحّد. عيّن كلمة مرور محلية لتتمكن أيضاً من تسجيل الدخول بالبريد الإلكتروني وكلمة المرور.
profile.password.localSet Lokales Passwort festgelegt. Sie können sich jetzt auch mit E-Mail und Passwort anmelden. Mot de passe local défini. Vous pouvez désormais vous connecter avec votre e-mail et votre mot de passe. Contraseña local establecida. Ahora puede iniciar sesión con correo y contraseña. Senha local definida. Agora você pode entrar com e-mail e senha. Локальный пароль задан. Теперь вы можете входить по электронной почте и паролю. ローカルパスワードを設定しました。メールアドレスとパスワードでサインインできます。 로컬 비밀번호가 설정되었습니다. 이제 이메일과 비밀번호로 로그인할 수 있습니다. تم تعيين كلمة المرور المحلية. يمكنك الآن تسجيل الدخول بالبريد الإلكتروني وكلمة المرور.
home.build.noCapability Das Erstellen von Apps ist in diesem System nicht verfügbar — es erfordert die Berechtigung „Metadaten verwalten“, die Ihr Konto nicht besitzt. La création d'applications n'est pas disponible dans ce système : elle requiert l'autorisation « Gérer les métadonnées », que votre compte ne possède pas. La creación de aplicaciones no está disponible en este sistema: requiere el permiso «Gestionar metadatos», que su cuenta no tiene. A criação de aplicativos não está disponível neste sistema — ela exige a permissão “Gerenciar metadados”, que sua conta não possui. Создание приложений недоступно в этой системе — для этого нужно разрешение «Управление метаданными», которого нет у вашей учётной записи. このシステムではアプリの作成はできません — 「メタデータ管理」権限が必要ですが、お使いのアカウントにはありません。 이 시스템에서는 앱 만들기를 사용할 수 없습니다 — ‘메타데이터 관리’ 권한이 필요하지만 계정에 해당 권한이 없습니다. إنشاء التطبيقات غير متاح في هذا النظام — فهو يتطلب إذن «إدارة البيانات الوصفية» الذي لا يملكه حسابك.
home.loading Wird geladen… Chargement… Cargando… Carregando… Загрузка… 読み込み中… 로딩 중… جارٍ التحميل…
home.noAppsDescription Das System wird eingerichtet — Apps, die Ihr Administrator für Sie freigibt, erscheinen hier. Le système est en cours de configuration — les applications partagées par votre administrateur apparaîtront ici. El sistema se está preparando — las aplicaciones que su administrador comparta aparecerán aquí. O sistema está sendo preparado — os aplicativos que seu administrador compartilhar aparecerão aqui. Система настраивается — приложения, которыми поделится администратор, появятся здесь. システムを準備中です — 管理者が共有したアプリがここに表示されます。 시스템을 준비하고 있습니다 — 관리자가 공유한 앱이 여기에 표시됩니다. يجري إعداد النظام — وستظهر هنا التطبيقات التي يشاركها معك المسؤول.
home.recoveryReminder.message (unchanged) (unchanged) (unchanged) (unchanged) (unchanged) (unchanged) (unchanged) (unchanged)
home.quickActions.systemSettingsDesc Konfigurieren Sie Ihr System Configurez votre système Configura tu sistema Configure seu sistema Настройте систему システムを設定 시스템 구성 تكوين النظام
connectAgent.url.title MCP-Endpunkt dieses Systems Endpoint MCP de ce système Endpoint MCP de este sistema Endpoint MCP deste sistema MCP-эндпоинт этой системы このシステムの MCP エンドポイント 이 시스템의 MCP 엔드포인트 نقطة نهاية MCP لهذا النظام
connectAgent.url.skillHint Die portable Agenten-Skill-Datei: erklärt jedem skill-fähigen Agenten die Arbeit mit diesem System. La skill d’agent portable : apprend à tout agent compatible à travailler avec ce système. La skill portátil del agente: enseña a cualquier agente compatible cómo trabajar con este sistema. A skill portátil do agente: ensina qualquer agente compatível a trabalhar com este sistema. Переносимый навык агента: учит любого совместимого агента работать с этой системой. ポータブルなエージェントスキル:スキル対応エージェントにこのシステムの使い方を教えます。 이식 가능한 에이전트 스킬: 스킬을 지원하는 에이전트에게 이 시스템 사용법을 알려줍니다. مهارة الوكيل المحمولة: تعلّم أي وكيل داعم للمهارات كيفية العمل مع هذا النظام.
aiModelStatus.readFailed Das effektive KI-Modell konnte nicht gelesen werden. In diesem System läuft möglicherweise kein KI-Dienst, oder Ihnen fehlt die Berechtigung ai:read. Impossible de lire le modèle d'IA effectif. Ce système n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read. No se pudo leer el modelo de IA efectivo. Puede que este sistema no ejecute un servicio de IA o que no tenga el permiso ai:read. Não foi possível ler o modelo de IA efetivo. Este sistema pode não executar um serviço de IA, ou você pode não ter a permissão ai:read. Не удалось прочитать действующую модель ИИ. В этой системе может не быть запущен сервис ИИ, либо у вас нет разрешения ai:read. 有効な AI モデルを読み取れませんでした。このシステムは AI サービスを実行していないか、ai:read 権限がない可能性があります。 유효한 AI 모델을 읽을 수 없습니다. 이 시스템에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다. تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال. قد لا يُشغّل هذا النظام خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.
aiModelStatus.readFailedWithStatus Das effektive KI-Modell konnte nicht gelesen werden (HTTP {{status}}). In diesem System läuft möglicherweise kein KI-Dienst, oder Ihnen fehlt die Berechtigung ai:read. Impossible de lire le modèle d'IA effectif (HTTP {{status}}). Ce système n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read. No se pudo leer el modelo de IA efectivo (HTTP {{status}}). Puede que este sistema no ejecute un servicio de IA o que no tenga el permiso ai:read. Não foi possível ler o modelo de IA efetivo (HTTP {{status}}). Este sistema pode não executar um serviço de IA, ou você pode não ter a permissão ai:read. Не удалось прочитать действующую модель ИИ (HTTP {{status}}). В этой системе может не быть запущен сервис ИИ, либо у вас нет разрешения ai:read. 有効な AI モデルを読み取れませんでした(HTTP {{status}})。このシステムは AI サービスを実行していないか、ai:read 権限がない可能性があります。 유효한 AI 모델을 읽을 수 없습니다(HTTP {{status}}). 이 시스템에서 AI 서비스가 실행되지 않거나 ai:read 권한이 없을 수 있습니다. تعذّرت قراءة نموذج الذكاء الاصطناعي الفعّال (HTTP {{status}}). قد لا يُشغّل هذا النظام خدمة ذكاء اصطناعي، أو قد لا تملك صلاحية ai:read.

Not changed in these families, on purpose: de auth.device.approveWarning and home.template.marketplaceDisabled say "Laufzeitumgebung", ru auth.device.approveWarning says "среда выполнения" (both mean "runtime", which en says), ru auth.login.devAdminHint.title says "Локальная среда разработки" (a local development setup), and ja connectAgent.claude.reachability says 「イントラネット環境」 (an intranet). None of them names the deployment the user is in.

Pins (A2)

  • Updated: apps/console/src/pages/settings/__tests__/WorkspaceTimezonePrompt.test.tsx asserted the old title in en (twice) and zh, and the old en toast. It now asserts "Set the system timezone", 「设置系统时区」 and "System timezone set to Europe/Berlin".
  • Updated: packages/i18n/src/__tests__/ellipsis-glyph-3878.test.ts, the Loading… group list (above).
  • New: packages/i18n/src/__tests__/console-copy-system-noun-12956.test.ts enumerates every zh string under each named family and fails on 此环境 / 本环境 / 该环境. It asserts each family resolves to at least one string first, so a family that stops resolving cannot pass vacuously.
  • Ablation, run once on 01c849e092 via scripts/ablation-replace.mjs from the objectstack checkout (the test reads src, no build in the path): zh console.readRate.ratioTitle set back to 「本环境读取量异常」. Mutation landed (anchor 1 → 0, blob 4fced541eba5 → 5e471d6fb55f). The pin went red: × zh console.readRate carries no 此环境 / 本环境 / 该环境, Tests 1 failed | 8 passed (9). Restored: blob == HEAD (4fced541eba5) and git diff HEAD empty.

Gates (run on 01c849e092)

  • pnpm check:i18n-keys 0. check:i18n-drift 0 ("22 en value(s) changed … 198 pack value(s) followed … Every changed en value was followed by all nine translation packs."). check:i18n-designer-parity 0, check:i18n-dead-keys 0.
  • Pre-tsc battery, all 0: check:phantom-deps, check:self-import, check:unreferenced-sources, check:doc-example-readers, check:handler-key-reads, check:side-effects-array, check:element-data-source-declaration, check:spec-symbols, check:action-forward-parity, check:designer-field-key-parity, check:icon-record-names, check:control-bytes, check:new-line-citations, node scripts/check-hand-rolled-comment-mask.mjs, node scripts/check-changeset-fixed.mjs, node scripts/check-changeset-presence.mjs. check:spec-floors 1, no-artifact (it wants a whole-workspace build), as on main.
  • Type-check: @object-ui/i18n type-check 0 on 01c849e092 (its tsconfig.test.json lists both edited tests). @object-ui/app-shell and @object-ui/console type-check 0 after turbo run build --filter='@object-ui/console^...' (34 tasks) on d82d4ed40c. The later commit touches only i18n values and one i18n test.
  • vitest, targeted, --maxWorkers=1, under the shared lock: 13 i18n files (the new pin plus the locale-parity, ellipsis, quote, orthography, identity, namespace and census suites) 219 passed; 11 app-shell files that render the changed keys 100 passed; 9 console files 71 passed. The whole packages/i18n/, packages/app-shell/ and apps/console/ directories are left to CI.
  • Lint: eslint --no-inline-config --format json over the 21 changed .ts/.tsx files: 21 files, 0 errors, 5 warnings, all on lines this PR does not touch. The root eslint.config.js sets no type-aware parser options, so this diff cannot change a verdict on any file it does not touch. The repo-wide pnpm lint is left to CI.

Deviations

  1. Eight consumer files outside the claimed surface, inline defaultValue literals only, because pnpm check:i18n-keys refuses a default that differs from the en value: packages/app-shell/src/layout/ReadRateBanner.tsx, packages/app-shell/src/console/auth/signUpRefusalMessages.ts, packages/app-shell/src/console/home/HomePage.tsx, packages/app-shell/src/console/home/QuickActions.tsx, apps/console/src/pages/auth/AuthLayout.tsx, apps/console/src/pages/auth/VerifyEmailPromptPage.tsx, apps/console/src/pages/auth/RegisterPage.tsx, apps/console/src/pages/system/ProfilePage.tsx. No logic or comment changed.
  2. The changeset names @object-ui/app-shell and @object-ui/console as well as @object-ui/i18n (all patch), since their source changed. All three are in the fixed group, so the release is the same.
  3. The claim said to stop on a surface breach. Deviation 1 was taken instead because the defaults are forced byte-for-byte by a gate and carry no decision; the report names the conflict, and the seat can ask for them to be split out.

Acceptance notes (zh 此环境 / 本环境 outside the named families, not changed)

  • marketplace.accessDenied.description (「本环境中」), marketplace.detail.reseedQueued and marketplace.detail.sampleDataKernelUnavailable (「该环境」), marketplace.install.dialogDescCurrent, marketplace.install.deployTimeout, marketplace.update.dialogDescCurrent, marketplace.update.deployTimeout (「当前环境」). These install into a chosen deployment, which is the cloud noun's own use.
  • cloudWorkspaceTimezoneNotice.seeded keeps 「环境时区在创建时已按你的浏览器设为…」 on the cloud home. The in-system prompt now says 「系统时区」, so the two surfaces name the same setting differently. The cloud home is outside this card.
  • The metadata-admin designer table (packages/app-shell/src/views/metadata-admin/i18n.ts, not a locale pack) says 「此环境 / 本环境」 in engine.packages.description, engine.packages.noCapability, engine.packages.detail.adoptConfirm, perm.badge.custom and four permission-set clone and lock strings, with en "this environment" beside them. Same rule, different table, not in this card's Scope.

Generated by Claude Code

…d noun (objectui#12956)

Inside a running deployment the console no longer calls itself
"this environment" / 「此环境 / 本环境」: the named families (settingsHub,
workspaceTimezonePrompt, readRate, auth, profile.password, home,
connectAgent, aiModelStatus) say "this system" / 「本系统」, or drop the
noun. All ten packs follow; inline English defaults follow en. No key
renamed, added or removed.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Dropping the cloud noun made the en value of home.loading the bare
"Loading…", so it now belongs to the group ellipsis-glyph-3878 pins for
per-language uniformity. zh and ko take the group's rendering; the pinned
member list grows by that one key.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
@github-actions

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 1 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/11659-console-record-ux.md

  • names HomePage.tsx → packages/app-shell/src/console/home/HomePage.tsx — edited by this change

    The backup-password reminder no longer appears in the user's first session. 「建议设置一个备用密码」 showed on the environment home right after a new user built their first app: the reminder was gated on a home-visit count (quiet on the first home mount, shown on the second), and coming back to home after building is the second mount inside the first sitting. It now stays quiet for 12 hours after the first home visit on the device, so it first shows on a later day's visit. The first-visit record (os:recovery-pw-first-seen) now holds a timestamp; a device that holds the old '1' flag starts the 12 hours over rather than reading it as long ago. When storage is unavailable it stays quiet. RecoveryPasswordReminder moves out of HomePage.tsx into its own module; it is not exported from the package entry, and its other conditions (dismissed, SSO-enforced, has a local password) are unchanged.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with b5153f44e (merge-base with origin/main): 21 file(s) changed outside .changeset/, read against 759 pending declaration(s) that publish a body (783 pending in total). · run

@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 75 chunks) 3161.4 KB 3744.1 KB
Main entry chunk (gzip) 80.5 KB 350 KB
Entry file index-CbGWLaIT.js —
Status PASS —

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 21.41KB 7.88KB
app-shell (runtime-config.js) 24.52KB 8.48KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 45.59KB 12.03KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.67KB 6.12KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.74KB 3.94KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 42.84KB 11.66KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
collaboration (useCollaborationTranslation.js) 6.50KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 612.39KB 149.02KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.83KB 69.44KB
fields (index.js) 291.72KB 74.47KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.33KB 11.96KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 16.04KB 3.92KB
plugin-calendar (index.js) 55.04KB 16.10KB
plugin-charts (index.js) 85.06KB 23.39KB
plugin-chatbot (index.js) 230.81KB 54.29KB
plugin-dashboard (index.js) 147.53KB 39.95KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 266.04KB 70.50KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 181.16KB 46.84KB
plugin-gantt (index.js) 178.46KB 45.13KB
plugin-grid (index.js) 272.87KB 75.68KB
plugin-kanban (index.js) 63.37KB 19.51KB
plugin-list (index.js) 139.82KB 36.04KB
plugin-map (index.js) 27.17KB 9.00KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.31KB 11.88KB
plugin-tree (index.js) 15.27KB 5.40KB
plugin-view (index.js) 94.68KB 24.36KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 125.37KB 41.04KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.71KB 2.11KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 1.13KB 0.65KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 5.78KB 2.70KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (product-blocks.js) 0.20KB 0.19KB
types (record-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

CI stand-down · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-18T11:31Z

Failing check: the per-shard Test gate (job 117661813185, run 39122114903) on head 01c849e.

Why it is not this PR's: every test shard passed. The gate re-read the shards 8 times up to 11:22:57Z and still saw Test (shard 14/16) as in_progress, then refused ("1 test shard(s) did not report success: Test (shard 14/16) (no conclusion)"). The shard's own check-run (117659639511) completed success at 11:19:42Z, before the gate's last read, so the gate read a stale status. No test failed, and nothing in this PR's diff (locale values, inline defaultValue twins, one i18n pin) touches the gate or the shard. It is the same class as the shard-8 race on PR #12905 (stand-down 6237517319).

Fix: none exists in the gate yet; this is the one re-run of the failed job, on the same head.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 18, 2026 11:34
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 18, 2026 11:34
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 18, 2026
Merged via the queue into main with commit 7f9cc37 Oct 18, 2026
60 of 61 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-12956-console-copy-system branch October 18, 2026 11:47
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

2 participants