From 733e3fde4acfa04b928e3c387d2d01ad221d27fd Mon Sep 17 00:00:00 2001 From: Adam Moussa Date: Fri, 10 Jul 2026 13:52:10 -0400 Subject: [PATCH] fix(open-swe): correct Fable copy to describe provider data sharing, not ZDR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ported admin toggle description and code comments described Fable 5 as incompatible with Zero Data Retention. That is backwards: Fable 5 requires the account to opt into Bedrock provider_data_share — prompts/completions are retained and shared with Anthropic (up to 30 days, incl. human review). The old UI copy would lead an admin to believe the opposite of what enabling the toggle does. Reword the toggle description and the gate_fable_model / team_settings comments accordingly. Still off by default. Refs #171. --- agent/dashboard/options.py | 11 +++++++---- agent/dashboard/team_settings.py | 2 +- ui/src/routes/admin.tsx | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/agent/dashboard/options.py b/agent/dashboard/options.py index 736f61e3..3e22bd3c 100644 --- a/agent/dashboard/options.py +++ b/agent/dashboard/options.py @@ -101,10 +101,13 @@ def fable_disabled_fallback(effort: object = None) -> tuple[str, str]: def gate_fable_model( model_id: str, effort: str | None, *, fable_enabled: bool ) -> tuple[str, str | None]: - """ZDR guard: if Fable is disabled but a Fable id was resolved, swap in a - safe non-Fable model. Non-Fable selections pass through unchanged. Applied - at every model-construction entrypoint so a disabled Fable model can never - reach ``make_model``, no matter which layer selected it.""" + """Provider-data-share gate: if Fable is disabled but a Fable id was + resolved, swap in a safe non-Fable model. Fable requires the account to opt + into Bedrock ``provider_data_share`` (prompts/completions shared with the + provider), so it is gated off by default. Non-Fable selections pass through + unchanged. Applied at every model-construction entrypoint so a disabled + Fable model can never reach ``make_model``, no matter which layer selected + it.""" if not fable_enabled and isinstance(model_id, str) and model_id in FABLE_MODEL_IDS: return fable_disabled_fallback(effort) return model_id, effort diff --git a/agent/dashboard/team_settings.py b/agent/dashboard/team_settings.py index a51763c3..5c65b971 100644 --- a/agent/dashboard/team_settings.py +++ b/agent/dashboard/team_settings.py @@ -135,7 +135,7 @@ class TeamSettingsUpdate(BaseModel): self.default_chat_model, self.default_chat_reasoning_effort, "review chat" ) if not self.fable_enabled: - # Disabling Fable is the ZDR kill switch and must always succeed: rather + # Disabling Fable is the provider-data-share kill switch and must always succeed: rather # than reject a payload that still carries a Fable default, swap each # Fable default to its safe non-Fable fallback (mirrors the runtime # gate_fable_model guard) so the stored record can't advertise Fable. diff --git a/ui/src/routes/admin.tsx b/ui/src/routes/admin.tsx index 81775b78..15b4ece6 100644 --- a/ui/src/routes/admin.tsx +++ b/ui/src/routes/admin.tsx @@ -713,7 +713,7 @@ function FableSection() { return (