diff --git a/packages/client/README.md b/packages/client/README.md index ab7c7bd1..bbe0170f 100644 --- a/packages/client/README.md +++ b/packages/client/README.md @@ -799,9 +799,10 @@ version does not recognise, not that something failed. > **Beta caveats, worth knowing before you deploy.** Payload signing does not exist on this > channel yet, so delivery is TLS-only and the content hash establishes self-consistency, not -> origin authenticity. The FDv2 protocol is opt-in per account: without it the endpoints -> return HTTP 403, which the store reports as a fatal error explaining what to do. `ld-relay` -> does not speak the FDv2 endpoints, so relay-only deployments cannot receive skills. +> origin authenticity. The SDK-facing FDv2 endpoints are available to every account. An +> account without Agent Skills access receives no skill content rather than an error status. +> An HTTP 403 is reported as a fatal error explaining what to check. `ld-relay` does not +> speak the FDv2 endpoints, so relay-only deployments cannot receive skills. **If every skill comes back empty, check `diagnostics.hashless_objects`.** Objects without a `contentHash` are withheld, so a nonzero count means skills are being withheld, not that the diff --git a/packages/client/src/launchdarkly_ai_server/skills_fdv2.py b/packages/client/src/launchdarkly_ai_server/skills_fdv2.py index 90aee139..2c797f07 100644 --- a/packages/client/src/launchdarkly_ai_server/skills_fdv2.py +++ b/packages/client/src/launchdarkly_ai_server/skills_fdv2.py @@ -914,9 +914,10 @@ class _StaleRequestStateError(_RecoverableTransportError): ) _FORBIDDEN_ADVICE = ( - "The FDv2 protocol is opt-in per LaunchDarkly account and is served as HTTP " - "403 while it is off. Skill delivery needs it enabled; contact LaunchDarkly " - "support to enable it for your account." + "The SDK-facing FDv2 endpoints are available to every LaunchDarkly account, " + "so check that the SDK key is the environment's server-side SDK key and that " + "no proxy in between is refusing the request. If neither explains it, " + "contact LaunchDarkly support." ) diff --git a/packages/client/tests/test_skills_fdv2.py b/packages/client/tests/test_skills_fdv2.py index ce5c0e69..b35c5d72 100644 --- a/packages/client/tests/test_skills_fdv2.py +++ b/packages/client/tests/test_skills_fdv2.py @@ -2136,8 +2136,8 @@ def test_a_403_stops_delivery_and_explains_why( with poll_store(endpoint) as store: assert wait_until(lambda: store.failed is not None) assert "403" in store.failed - assert "opt-in" in store.failed - assert any("opt-in" in r.getMessage() for r in caplog.records) + assert "proxy" in store.failed + assert any("proxy" in r.getMessage() for r in caplog.records) def test_the_give_up_line_points_at_start_not_a_process_restart( self, endpoint: Any, caplog: Any