From 0cea4de69eec14aed8f5bf502de54da21e912b43 Mon Sep 17 00:00:00 2001 From: Jake Howell Date: Wed, 25 Mar 2026 20:06:48 +1100 Subject: [PATCH] fix: `AI governance` into `AI Governance` (#23553) --- codersdk/deployment.go | 4 ++-- docs/ai-coder/ai-governance.md | 2 +- docs/ai-coder/tasks.md | 2 +- docs/ai-coder/usage-data-reporting.md | 2 +- enterprise/coderd/license/license.go | 6 +++--- enterprise/coderd/license/license_test.go | 12 ++++++------ .../AIGovernanceAddOnCard.stories.tsx | 2 +- .../LicensesSettingsPage/AIGovernanceAddOnCard.tsx | 2 +- .../LicensesSettingsPage/AIGovernanceLicensing.ts | 2 +- .../AIGovernanceUsersConsumptionChart.stories.tsx | 2 +- .../AIGovernanceUsersConsumptionChart.tsx | 4 ++-- .../LicensesSettingsPage/LicenseCard.stories.tsx | 2 +- .../LicensesSettingsPage/LicenseCard.tsx | 4 ++-- .../LicensesSettingsPageView.stories.tsx | 4 ++-- 14 files changed, 25 insertions(+), 25 deletions(-) diff --git a/codersdk/deployment.go b/codersdk/deployment.go index ecfd5f7ad3..0b6b291fe5 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -88,7 +88,7 @@ var ( func (a Addon) Features() []FeatureName { switch a { case AddonAIGovernance: - // Return all AI governance features. + // Return all AI Governance features. var features []FeatureName for _, featureName := range FeatureNames { if featureName.IsAIGovernanceAddon() { @@ -306,7 +306,7 @@ func (n FeatureName) UsesUsagePeriod() bool { }[n] } -// IsAIGovernanceAddon returns true if the feature is an AI governance addon feature. +// IsAIGovernanceAddon returns true if the feature is an AI Governance addon feature. func (n FeatureName) IsAIGovernanceAddon() bool { return n == FeatureAIBridge || n == FeatureBoundary } diff --git a/docs/ai-coder/ai-governance.md b/docs/ai-coder/ai-governance.md index c08b2d728c..c4ea9a906b 100644 --- a/docs/ai-coder/ai-governance.md +++ b/docs/ai-coder/ai-governance.md @@ -32,7 +32,7 @@ It's a good fit if you're: - Managing AI workflows against sensitive or regulated codebases - Expanding the use of Coder Tasks for AI-driven background work -If you already use other AI governance tools, such as third-party LLM gateways +If you already use other AI Governance tools, such as third-party LLM gateways or vendor-managed policies, you can continue using them. Coder Workspaces can still serve as the backend for development environments and AI workflows, with or without the AI Governance Add-On. diff --git a/docs/ai-coder/tasks.md b/docs/ai-coder/tasks.md index fa8d951ea5..d1642f73fa 100644 --- a/docs/ai-coder/tasks.md +++ b/docs/ai-coder/tasks.md @@ -15,7 +15,7 @@ The Task details view shows the user's complete chat, workspace status and, buil ![VS Code IDE Extension Details View](../images/guides/ai-agents/vs_code_tasks_extension_details.png) > [!NOTE] -> Both Community and Premium deployments include 1,000 Agent Workspace Builds for proof-of-concept use. Community deployments do not have access to [AI Bridge](./ai-bridge/index.md) or [Agent Boundaries](./agent-boundaries/index.md). To scale beyond the 1,000 build limit or enable AI governance features, the [AI Governance Add-On](./ai-governance.md) provides expanded usage pools that grow with your user count. [Contact us](https://coder.com/contact) to discuss pricing. +> Both Community and Premium deployments include 1,000 Agent Workspace Builds for proof-of-concept use. Community deployments do not have access to [AI Bridge](./ai-bridge/index.md) or [Agent Boundaries](./agent-boundaries/index.md). To scale beyond the 1,000 build limit or enable AI Governance features, the [AI Governance Add-On](./ai-governance.md) provides expanded usage pools that grow with your user count. [Contact us](https://coder.com/contact) to discuss pricing. ## Supported Agents (and Models) diff --git a/docs/ai-coder/usage-data-reporting.md b/docs/ai-coder/usage-data-reporting.md index 029a8e7361..9d8fe08bfa 100644 --- a/docs/ai-coder/usage-data-reporting.md +++ b/docs/ai-coder/usage-data-reporting.md @@ -3,7 +3,7 @@ The [AI Governance Add-On](./ai-governance.md) requires reporting usage data to Tallyman, a Coder-managed server for billing and reporting purposes. Coder only captures and sends the following information, related to your deployment ID: - number of agent workspace builds consumed -- number of AI governance seats consumed +- number of AI Governance seats consumed No user-identifiable information or additional metrics are sent to Tallyman. This information is also shared with [Metronome](https://metronome.com), a Stripe product and Coder partner for usage-based and reporting. diff --git a/enterprise/coderd/license/license.go b/enterprise/coderd/license/license.go index 7cdfb6d826..5a71ee9800 100644 --- a/enterprise/coderd/license/license.go +++ b/enterprise/coderd/license/license.go @@ -495,15 +495,15 @@ func LicensesEntitlements( case feature.Entitlement == codersdk.EntitlementNotEntitled: // If the limit is not set entitlements.Errors = append(entitlements.Errors, - fmt.Sprintf("Your deployment has %d active AI governance seats but the license is not entitled to this feature.", featureArguments.ActiveAISeatCount)) + fmt.Sprintf("Your deployment has %d active AI Governance seats but the license is not entitled to this feature.", featureArguments.ActiveAISeatCount)) case feature.Entitlement == codersdk.EntitlementGracePeriod && feature.Limit != nil: entitlements.Warnings = append(entitlements.Warnings, fmt.Sprintf( - "Your deployment has %d active AI governance seats but the license with the limit %d is expired.", + "Your deployment has %d active AI Governance seats but the license with the limit %d is expired.", featureArguments.ActiveAISeatCount, *feature.Limit)) case feature.Limit != nil && featureArguments.ActiveAISeatCount > *feature.Limit: entitlements.Warnings = append(entitlements.Warnings, fmt.Sprintf( - "Your deployment has %d active AI governance seats but is only licensed for %d.", + "Your deployment has %d active AI Governance seats but is only licensed for %d.", featureArguments.ActiveAISeatCount, *feature.Limit)) } } diff --git a/enterprise/coderd/license/license_test.go b/enterprise/coderd/license/license_test.go index d23858b07a..1296b23b96 100644 --- a/enterprise/coderd/license/license_test.go +++ b/enterprise/coderd/license/license_test.go @@ -952,7 +952,7 @@ func TestEntitlements(t *testing.T) { require.EqualValues(t, 100, *aiGovernanceSeatLimit.Limit) require.Len(t, entitlements.Warnings, 1) - require.Equal(t, "Your deployment has 127 active AI governance seats but is only licensed for 100.", entitlements.Warnings[0]) + require.Equal(t, "Your deployment has 127 active AI Governance seats but is only licensed for 100.", entitlements.Warnings[0]) }) } @@ -1897,7 +1897,7 @@ func TestAIGovernanceAddon(t *testing.T) { empty := map[codersdk.FeatureName]bool{} - t.Run("AIGovernanceAddon enables AI governance features when enablements are set", func(t *testing.T) { + t.Run("AIGovernanceAddon enables AI Governance features when enablements are set", func(t *testing.T) { t.Parallel() db, _ := dbtestutil.NewDB(t) db.InsertLicense(context.Background(), database.InsertLicenseParams{ @@ -1912,7 +1912,7 @@ func TestAIGovernanceAddon(t *testing.T) { Exp: dbtime.Now().Add(time.Hour), }) - // Enable AI governance features in enablements. + // Enable AI Governance features in enablements. enablements := map[codersdk.FeatureName]bool{ codersdk.FeatureAIBridge: true, codersdk.FeatureBoundary: true, @@ -1935,7 +1935,7 @@ func TestAIGovernanceAddon(t *testing.T) { // require.Equal(t, codersdk.EntitlementEntitled, boundaryFeature.Entitlement, "Boundary should be entitled when addon is present") }) - t.Run("AIGovernanceAddon not present disables AI governance features", func(t *testing.T) { + t.Run("AIGovernanceAddon not present disables AI Governance features", func(t *testing.T) { t.Parallel() db, _ := dbtestutil.NewDB(t) db.InsertLicense(context.Background(), database.InsertLicenseParams{ @@ -1992,7 +1992,7 @@ func TestAIGovernanceAddon(t *testing.T) { require.True(t, entitlements.HasLicense) // TODO: Readd this test once AI Bridge is enforced as an add-on license. - // AI governance features should be enabled but in grace period. + // AI Governance features should be enabled but in grace period. // aibridgeFeature := entitlements.Features[codersdk.FeatureAIBridge] // require.True(t, aibridgeFeature.Enabled, "AI Bridge should be enabled during grace period") // require.Equal(t, codersdk.EntitlementGracePeriod, aibridgeFeature.Entitlement, "AI Bridge should be in grace period") @@ -2060,7 +2060,7 @@ func TestAIGovernanceAddon(t *testing.T) { require.Equal(t, "Feature AI Governance User Limit must be set when using the AI Governance addon.", entitlements.Errors[0]) // TODO: Readd this test once AI Bridge is enforced as an add-on license. - // AI governance features should not be entitled when validation fails. + // AI Governance features should not be entitled when validation fails. // aibridgeFeature := entitlements.Features[codersdk.FeatureAIBridge] // require.False(t, aibridgeFeature.Enabled, "AI Bridge should not be enabled when addon validation fails") // require.Equal(t, codersdk.EntitlementNotEntitled, aibridgeFeature.Entitlement, "AI Bridge should not be entitled when addon validation fails") diff --git a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.stories.tsx b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.stories.tsx index b2c138d2dd..629b3b42d5 100644 --- a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.stories.tsx +++ b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.stories.tsx @@ -6,7 +6,7 @@ const meta: Meta = { "pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard", component: AIGovernanceAddOnCard, args: { - title: "AI governance", + title: "AI Governance", unit: "Seats", actual: 750, limit: 1000, diff --git a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.tsx b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.tsx index cc200abc7b..1a1da43fdf 100644 --- a/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.tsx +++ b/site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/AIGovernanceAddOnCard.tsx @@ -41,7 +41,7 @@ export const AIGovernanceAddOnCard: FC = ({