Prevent removing or demoting RuleBot while Agent rules exist#96981
Prevent removing or demoting RuleBot while Agent rules exist#96981MelvinBot wants to merge 7 commits into
Conversation
This comment has been minimized.
This comment has been minimized.
|
Fixed the failing Root cause: The new Fix: Added a localized Verified locally: Notes
|
|
|
|
✅ What was wrong: The new Fix: Added a localized ESLint, Storybook, and the builds are also green. The remaining |
|
@linhvovan29546 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a6741e16d4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
All code checks are now green after my earlier push ( The one remaining red check is PR Reviewer Checklist / Recap of the fixThe real failure was |
|
@ikevin127 Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
This comment has been minimized.
This comment has been minimized.
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
Fixed the failing Root cause: Fix: Removed Verified locally: ESLint passes on the file, and the internal call in Notes
|
When a workspace has Agent rules but no live RuleBot assigned (none assigned, the agent was deleted, or it was removed from the workspace member list), the rules are silently not enforced. Surface this in the Agent rules section header with a red warning so admins know. Adds a hasRules input to useAgentRulesSectionHeader and renders the warning when rules exist but ruleBotAccountID is missing or the assigned bot is no longer an active policy member. Co-authored-by: Nicolás Bonet <NicolasBonet@users.noreply.github.com>
Co-authored-by: Nicolás Bonet <NicolasBonet@users.noreply.github.com>
The server assigns a RuleBot when it processes a rule creation, so the optimistic add briefly shows the warning until the response arrives. Only count server-confirmed rules when deciding enforcement is missing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the not-enforced warning approach: instead of flagging rules without an enforcer after the fact, prevent RuleBot from being removed (member details page and bulk members removal) and its account from being closed while agent rules still exist on the workspace. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0e6d520 to
89bdcec
Compare
Co-authored-by: Nicolás Bonet <NicolasBonet@users.noreply.github.com>
|
Fixed the failing Root cause: The latest commit on this branch ( Fix: Removed Verification
|
…xist Deleting the RuleBot agent (edit agent page, agents bulk delete, or close account while copiloting into it) or demoting it to a non-admin role (role selection page, members bulk role change) would leave the workspace's agent rules without an enforcer, so both are blocked with an explanatory modal until the rules are removed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 899fb5ef09a..85d889d076e 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -7802,15 +7802,14 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
deleteRuleConfirmation: 'Sind Sie sicher, dass Sie diese Regel löschen möchten?',
unableToRemoveTitle: 'Entfernen nicht möglich',
unableToRemovePrompt: (rulesRoute: string) =>
- `Die von RuleBot durchgesetzten <a href="${rulesRoute}">Agentenregeln</a> müssen zuerst aus Ihrem Workspace entfernt werden, bevor Sie diese Agentin/diesen Agenten entfernen können.`,
+ `Die von RuleBot durchgesetzten <a href="${rulesRoute}">Agentenregeln</a> müssen zuerst aus Ihrem Workspace entfernt werden, bevor Sie diesen Agenten entfernen können.`,
unableToCloseAccountTitle: 'Konto kann nicht geschlossen werden',
- unableToCloseAccountPrompt: 'Die von RuleBot durchgesetzten Agentenregeln müssen zuerst aus Ihrem Workspace entfernt werden, bevor Sie dieses Konto schließen können.',
+ unableToCloseAccountPrompt: 'Die von RuleBot durchgesetzten Agentenregeln müssen zunächst aus Ihrem Workspace entfernt werden, bevor Sie dieses Konto schließen können.',
unableToDeleteAgentTitle: 'Agent kann nicht gelöscht werden',
- unableToDeleteAgentPrompt:
- 'Die von RuleBot durchgesetzten Agentenregeln müssen zuerst aus Ihrem Workspace entfernt werden, bevor Sie diese Agentin/diesen Agenten löschen können.',
+ unableToDeleteAgentPrompt: 'Die von RuleBot durchgesetzten Agentenregeln müssen zuerst aus Ihrem Arbeitsbereich entfernt werden, bevor Sie diesen Agenten löschen können.',
unableToChangeRoleTitle: 'Rolle kann nicht geändert werden',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `Die von RuleBot durchgesetzten <a href="${rulesRoute}">Agentenregeln</a> müssen zuerst aus Ihrem Workspace entfernt werden, bevor Sie die Rolle dieser Agentin/dieses Agenten ändern können.`,
+ `Die von RuleBot durchgesetzten <a href="${rulesRoute}">Agent:innenregeln</a> müssen zuerst aus Ihrem Workspace entfernt werden, bevor Sie die Rolle dieser:s Agent:in ändern können.`,
describeRuleTitle: 'Beschreiben Sie die Regel, der Ihre KI-Agentin/Ihr KI-Agent folgen soll',
describeRuleHeadline: 'Beschreibe deine Regel',
disclaimer: 'KI-Agenten können Fehler machen.',
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 5927128dfc5..9410172197d 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -7716,14 +7716,14 @@ El plan Controlar empieza en 9 $ por miembro activo al mes.`,
deleteRuleConfirmation: '¿Seguro que quieres eliminar esta regla?',
unableToRemoveTitle: 'No se puede eliminar',
unableToRemovePrompt: (rulesRoute: string) =>
- `Las <a href="${rulesRoute}">reglas de agente</a> que RuleBot está aplicando deben eliminarse primero de tu espacio de trabajo antes de que puedas eliminar este agente.`,
+ `Primero debes eliminar de tu espacio de trabajo las <a href="${rulesRoute}">reglas de agente</a> que aplica RuleBot antes de poder eliminar este agente.`,
unableToCloseAccountTitle: 'No se puede cerrar la cuenta',
- unableToCloseAccountPrompt: 'Las reglas de agente que RuleBot está aplicando deben eliminarse primero de tu espacio de trabajo antes de que puedas cerrar esta cuenta.',
- unableToDeleteAgentTitle: 'No se puede eliminar el agente',
- unableToDeleteAgentPrompt: 'Las reglas de agente que RuleBot está aplicando deben eliminarse primero de tu espacio de trabajo antes de que puedas eliminar este agente.',
+ unableToCloseAccountPrompt: 'Primero hay que eliminar de tu espacio de trabajo las reglas de agente que está aplicando RuleBot antes de poder cerrar esta cuenta.',
+ unableToDeleteAgentTitle: 'No se puede eliminar al agente',
+ unableToDeleteAgentPrompt: 'Primero hay que eliminar las reglas del agente que está aplicando RuleBot en tu espacio de trabajo antes de que puedas borrar este agente.',
unableToChangeRoleTitle: 'No se puede cambiar el rol',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `Las <a href="${rulesRoute}">reglas de agente</a> que RuleBot está aplicando deben eliminarse primero de tu espacio de trabajo antes de que puedas cambiar el rol de este agente.`,
+ `Primero tienes que eliminar de tu espacio de trabajo las <a href="${rulesRoute}">reglas de agente</a> que está aplicando RuleBot antes de poder cambiar el rol de este agente.`,
disclaimer: 'Los agentes de IA pueden cometer errores.',
agentCreatedTitle: '¡RuleBot se ha añadido a tu espacio de trabajo!',
agentCreatedDescription: (agentsRoute: string) =>
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index ca203bcd4d6..36b36397c96 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -7828,17 +7828,17 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
editRuleTitle: 'Modifier la règle',
deleteRule: 'Supprimer la règle',
deleteRuleConfirmation: 'Voulez-vous vraiment supprimer cette règle ?',
- unableToRemoveTitle: 'Suppression impossible',
+ unableToRemoveTitle: 'Impossible de supprimer',
unableToRemovePrompt: (rulesRoute: string) =>
- `Les <a href="${rulesRoute}">règles d’agent</a> appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant que vous puissiez retirer cet agent.`,
+ `Les <a href="${rulesRoute}">règles d’agent</a> appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant que vous puissiez supprimer cet agent.`,
unableToCloseAccountTitle: 'Impossible de fermer le compte',
- unableToCloseAccountPrompt: 'Les règles d’agent appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant que vous puissiez fermer ce compte.',
+ unableToCloseAccountPrompt: 'Les règles d’agent appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant de pouvoir fermer ce compte.',
unableToDeleteAgentTitle: 'Impossible de supprimer l’agent',
unableToDeleteAgentPrompt:
'Les règles d’agent appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant que vous puissiez supprimer cet agent.',
- unableToChangeRoleTitle: 'Impossible de changer le rôle',
+ unableToChangeRoleTitle: 'Impossible de modifier le rôle',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `Les <a href="${rulesRoute}">règles d’agent</a> appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant que vous puissiez changer le rôle de cet agent.`,
+ `Les <a href="${rulesRoute}">règles d’agent</a> appliquées par RuleBot doivent d’abord être supprimées de votre espace de travail avant que vous puissiez modifier le rôle de cet agent.`,
describeRuleTitle: 'Décrivez la règle que votre agent IA doit suivre',
describeRuleHeadline: 'Décrivez votre règle',
disclaimer: 'Les agents IA peuvent faire des erreurs.',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 50e5bac265e..281aeb57deb 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -7780,14 +7780,14 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
deleteRuleConfirmation: 'Sei sicuro di voler eliminare questa regola?',
unableToRemoveTitle: 'Impossibile rimuovere',
unableToRemovePrompt: (rulesRoute: string) =>
- `Le <a href="${rulesRoute}">regole agente</a> applicate da RuleBot devono essere rimosse dal tuo spazio di lavoro prima di poter rimuovere questo agente.`,
+ `Le <a href="${rulesRoute}">regole dell'agente</a> applicate da RuleBot devono prima essere rimosse dal tuo spazio di lavoro prima che tu possa rimuovere questo agente.`,
unableToCloseAccountTitle: 'Impossibile chiudere l’account',
- unableToCloseAccountPrompt: 'Le regole agente applicate da RuleBot devono essere rimosse dal tuo spazio di lavoro prima di poter chiudere questo account.',
- unableToDeleteAgentTitle: 'Impossibile eliminare l’agente',
- unableToDeleteAgentPrompt: 'Le regole agente applicate da RuleBot devono essere rimosse dal tuo spazio di lavoro prima di poter eliminare questo agente.',
+ unableToCloseAccountPrompt: 'Le regole dell’agente applicate da RuleBot devono prima essere rimosse dal tuo workspace prima che tu possa chiudere questo account.',
+ unableToDeleteAgentTitle: "Impossibile eliminare l'agente",
+ unableToDeleteAgentPrompt: 'Le regole dell’agente applicate da RuleBot devono prima essere rimosse dal tuo spazio di lavoro prima che tu possa eliminare questo agente.',
unableToChangeRoleTitle: 'Impossibile modificare il ruolo',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `Le <a href="${rulesRoute}">regole agente</a> applicate da RuleBot devono essere rimosse dal tuo spazio di lavoro prima di poter modificare il ruolo di questo agente.`,
+ `Le <a href="${rulesRoute}">regole dell’agente</a> applicate da RuleBot devono prima essere rimosse dal tuo workspace prima che tu possa cambiare il ruolo di questo agente.`,
describeRuleTitle: 'Descrivi la regola che il tuo agente AI deve seguire',
describeRuleHeadline: 'Descrivi la tua regola',
disclaimer: 'Gli agenti IA possono commettere errori.',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 84ac4cf0246..453c4d0ca44 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -7687,14 +7687,14 @@ ${reportName}`,
deleteRuleConfirmation: 'このルールを削除してもよろしいですか?',
unableToRemoveTitle: '削除できません',
unableToRemovePrompt: (rulesRoute: string) =>
- `このエージェントを削除する前に、RuleBot が適用している<a href="${rulesRoute}">エージェントルール</a>をワークスペースから削除する必要があります。`,
+ `このエージェントを削除する前に、RuleBot によって適用されている<a href="${rulesRoute}">エージェントルール</a>をワークスペースから先に削除する必要があります。`,
unableToCloseAccountTitle: 'アカウントを閉鎖できません',
- unableToCloseAccountPrompt: 'このアカウントを閉鎖する前に、RuleBot が適用しているエージェントルールをワークスペースから削除する必要があります。',
+ unableToCloseAccountPrompt: 'このアカウントを閉鎖する前に、RuleBot によって適用されているエージェントルールを、まずワークスペースから削除する必要があります。',
unableToDeleteAgentTitle: 'エージェントを削除できません',
- unableToDeleteAgentPrompt: 'このエージェントを削除する前に、RuleBot が適用しているエージェントルールをワークスペースから削除する必要があります。',
+ unableToDeleteAgentPrompt: 'このエージェントを削除するには、まず RuleBot によって適用されているエージェントルールをワークスペースから削除する必要があります。',
unableToChangeRoleTitle: 'ロールを変更できません',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `このエージェントのロールを変更する前に、RuleBot が適用している<a href="${rulesRoute}">エージェントルール</a>をワークスペースから削除する必要があります。`,
+ `RuleBot によって適用されている <a href="${rulesRoute}">エージェントルール</a> は、このエージェントのロールを変更する前に、まずワークスペースから削除する必要があります。`,
describeRuleTitle: 'AI エージェントに従わせるルールを記述してください',
describeRuleHeadline: 'ルールを説明する',
disclaimer: 'AI エージェントは間違える場合があります。',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index ed5698163bc..0eaeadf9575 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -7759,16 +7759,16 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
editRuleTitle: 'Regel bewerken',
deleteRule: 'Regel verwijderen',
deleteRuleConfirmation: 'Weet je zeker dat je deze regel wilt verwijderen?',
- unableToRemoveTitle: 'Verwijderen niet mogelijk',
+ unableToRemoveTitle: 'Kan niet verwijderen',
unableToRemovePrompt: (rulesRoute: string) =>
`De <a href="${rulesRoute}">agentregels</a> die door RuleBot worden afgedwongen, moeten eerst uit je werkruimte worden verwijderd voordat je deze agent kunt verwijderen.`,
- unableToCloseAccountTitle: 'Account kan niet worden gesloten',
- unableToCloseAccountPrompt: 'De agentregels die door RuleBot worden afgedwongen, moeten eerst uit je werkruimte worden verwijderd voordat je dit account kunt sluiten.',
- unableToDeleteAgentTitle: 'Agent kan niet worden verwijderd',
- unableToDeleteAgentPrompt: 'De agentregels die door RuleBot worden afgedwongen, moeten eerst uit je werkruimte worden verwijderd voordat je deze agent kunt verwijderen.',
- unableToChangeRoleTitle: 'Rol kan niet worden gewijzigd',
+ unableToCloseAccountTitle: 'Kan account niet sluiten',
+ unableToCloseAccountPrompt: 'De agentregels die door RuleBot worden afgedwongen, moeten eerst uit je werkruimte worden verwijderd voordat je deze account kunt sluiten.',
+ unableToDeleteAgentTitle: 'Kan agent niet verwijderen',
+ unableToDeleteAgentPrompt: 'De door RuleBot afgedwongen agentregels moeten eerst uit je werkruimte worden verwijderd voordat je deze agent kunt verwijderen.',
+ unableToChangeRoleTitle: 'Kan rol niet wijzigen',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `De <a href="${rulesRoute}">agentregels</a> die door RuleBot worden afgedwongen, moeten eerst uit je werkruimte worden verwijderd voordat je de rol van deze agent kunt wijzigen.`,
+ `De door RuleBot afgedwongen <a href="${rulesRoute}">agentregels</a> moeten eerst uit je werkruimte worden verwijderd voordat je de rol van deze agent kunt wijzigen.`,
describeRuleTitle: 'Beschrijf de regel die je AI-agent moet volgen',
describeRuleHeadline: 'Beschrijf je regel',
disclaimer: 'AI-agents kunnen fouten maken.',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 1cb126b62df..fe2d433af80 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -7741,14 +7741,14 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
deleteRuleConfirmation: 'Na pewno chcesz usunąć tę regułę?',
unableToRemoveTitle: 'Nie można usunąć',
unableToRemovePrompt: (rulesRoute: string) =>
- `<a href="${rulesRoute}">Zasady agenta</a> egzekwowane przez RuleBot muszą najpierw zostać usunięte z przestrzeni roboczej, zanim będzie można usunąć tego agenta.`,
+ `Zanim będziesz mógł usunąć tego agenta, musisz najpierw usunąć z przestrzeni roboczej <a href="${rulesRoute}">reguły agentów</a> wymuszane przez RuleBota.`,
unableToCloseAccountTitle: 'Nie można zamknąć konta',
- unableToCloseAccountPrompt: 'Zasady agenta egzekwowane przez RuleBot muszą najpierw zostać usunięte z przestrzeni roboczej, zanim będzie można zamknąć to konto.',
+ unableToCloseAccountPrompt: 'Zanim będziesz mógł zamknąć to konto, musisz najpierw usunąć z przestrzeni roboczej reguły agentów egzekwowane przez RuleBot.',
unableToDeleteAgentTitle: 'Nie można usunąć agenta',
- unableToDeleteAgentPrompt: 'Zasady agenta egzekwowane przez RuleBot muszą najpierw zostać usunięte z przestrzeni roboczej, zanim będzie można usunąć tego agenta.',
+ unableToDeleteAgentPrompt: 'Zanim będziesz mógł usunąć tego agenta, musisz najpierw usunąć z przestrzeni roboczej reguły agenta egzekwowane przez RuleBota.',
unableToChangeRoleTitle: 'Nie można zmienić roli',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `<a href="${rulesRoute}">Zasady agenta</a> egzekwowane przez RuleBot muszą najpierw zostać usunięte z przestrzeni roboczej, zanim będzie można zmienić rolę tego agenta.`,
+ `Aby zmienić rolę tego agenta, najpierw musisz usunąć z jego przestrzeni roboczej <a href="${rulesRoute}">reguły agenta</a>, które są egzekwowane przez RuleBota.`,
describeRuleTitle: 'Opisz zasadę, której ma przestrzegać twój agent AI',
describeRuleHeadline: 'Opisz swoją regułę',
disclaimer: 'Agenci AI mogą popełniać błędy.',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 2adcc47c8e3..f6dd812ae77 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -7751,16 +7751,16 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
editRuleTitle: 'Editar regra',
deleteRule: 'Excluir regra',
deleteRuleConfirmation: 'Tem certeza de que quer excluir esta regra?',
- unableToRemoveTitle: 'Não é possível remover',
+ unableToRemoveTitle: 'Não foi possível remover',
unableToRemovePrompt: (rulesRoute: string) =>
- `As <a href="${rulesRoute}">regras de agente</a> aplicadas pelo RuleBot precisam ser removidas do seu espaço de trabalho antes que você possa remover este agente.`,
- unableToCloseAccountTitle: 'Não é possível encerrar a conta',
- unableToCloseAccountPrompt: 'As regras de agente aplicadas pelo RuleBot precisam ser removidas do seu espaço de trabalho antes que você possa encerrar esta conta.',
- unableToDeleteAgentTitle: 'Não é possível excluir o agente',
- unableToDeleteAgentPrompt: 'As regras de agente aplicadas pelo RuleBot precisam ser removidas do seu espaço de trabalho antes que você possa excluir este agente.',
- unableToChangeRoleTitle: 'Não é possível alterar a função',
+ `As <a href="${rulesRoute}">regras de agente</a> aplicadas pelo RuleBot precisam ser removidas do seu workspace antes que você possa remover este agente.`,
+ unableToCloseAccountTitle: 'Não foi possível encerrar a conta',
+ unableToCloseAccountPrompt: 'As regras de agente aplicadas pelo RuleBot precisam ser removidas do seu workspace antes que você possa encerrar esta conta.',
+ unableToDeleteAgentTitle: 'Não é possível excluir agente',
+ unableToDeleteAgentPrompt: 'As regras de agente aplicadas pelo RuleBot precisam ser removidas do seu workspace antes que você possa excluir este agente.',
+ unableToChangeRoleTitle: 'Não foi possível alterar a função',
unableToChangeRolePrompt: (rulesRoute: string) =>
- `As <a href="${rulesRoute}">regras de agente</a> aplicadas pelo RuleBot precisam ser removidas do seu espaço de trabalho antes que você possa alterar a função deste agente.`,
+ `As <a href="${rulesRoute}">regras de agente</a> aplicadas pelo RuleBot precisam ser removidas do seu workspace antes que você possa alterar a função deste agente.`,
describeRuleTitle: 'Descreva a regra que seu agente de IA deve seguir',
describeRuleHeadline: 'Descreva sua regra',
disclaimer: 'Os agentes de IA podem cometer erros.',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index db70220118f..e031eadd822 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -7514,13 +7514,13 @@ ${reportName}`,
deleteRule: '删除规则',
deleteRuleConfirmation: '确定要删除此规则吗?',
unableToRemoveTitle: '无法移除',
- unableToRemovePrompt: (rulesRoute: string) => `在移除此代理之前,需要先从工作区中移除由 RuleBot 执行的<a href="${rulesRoute}">代理规则</a>。`,
+ unableToRemovePrompt: (rulesRoute: string) => `在删除此代理之前,必须先从您的工作区中移除由 RuleBot 强制执行的<a href="${rulesRoute}">代理规则</a>。`,
unableToCloseAccountTitle: '无法关闭账户',
- unableToCloseAccountPrompt: '在关闭此账户之前,需要先从工作区中移除由 RuleBot 执行的代理规则。',
+ unableToCloseAccountPrompt: '在您关闭此账户之前,需先从工作区中移除由 RuleBot 执行的代理规则。',
unableToDeleteAgentTitle: '无法删除代理',
- unableToDeleteAgentPrompt: '在删除此代理之前,需要先从工作区中移除由 RuleBot 执行的代理规则。',
+ unableToDeleteAgentPrompt: '在删除此代理之前,必须先从您的工作区中移除由 RuleBot 强制执行的代理规则。',
unableToChangeRoleTitle: '无法更改角色',
- unableToChangeRolePrompt: (rulesRoute: string) => `在更改此代理的角色之前,需要先从工作区中移除由 RuleBot 执行的<a href="${rulesRoute}">代理规则</a>。`,
+ unableToChangeRolePrompt: (rulesRoute: string) => `在更改此代理的角色之前,必须先从你的工作区中移除由 RuleBot 强制执行的<a href="${rulesRoute}">代理规则</a>。`,
describeRuleTitle: '描述你的 AI 代理需要遵循的规则',
describeRuleHeadline: '描述您的规则',
disclaimer: 'AI 智能体可能会犯错。',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Explanation of Change
When a workspace has Agent rules, they are enforced by a RuleBot agent that is added as a workspace admin. If that RuleBot is removed from the workspace (or its account is closed, the agent is deleted, or it's demoted to a role that can't act on other members' reports), the rules silently stop being enforced.
Instead of flagging that broken state after the fact, this PR prevents it from happening:
hasAgentRules/isRuleBotEnforcingRules/isRuleBotEnforcingRulesOnAnyPolicyhelpers toAgentRulesUtils. Rules pending delete don't count, so removal is allowed once the last rule is deleted (even while the delete is still optimistic).Once all Agent rules are deleted from the workspace, RuleBot can be removed, demoted, or deleted normally.
Fixed Issues
$ https://github.com/Expensify/Expensify/issues/663163
PROPOSAL: https://github.com/Expensify/Expensify/issues/663163#issuecomment-5060447097
Tests
settings/security/closeAccount, fill in the form, and submit. Verify the "Unable to close account" modal appears and the account is not closed.Offline tests
Same as Tests — the guard is derived from Onyx policy data, so the blocking modals appear identically while offline.
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
MacOS: Chrome / Safari