Skip to content

refactor(api): pass real errors in CodeInternal instead of generic sentinel#1689

Merged
rohilsurana merged 7 commits into
mainfrom
refactor/pass-real-errors-in-code-internal
Jun 9, 2026
Merged

refactor(api): pass real errors in CodeInternal instead of generic sentinel#1689
rohilsurana merged 7 commits into
mainfrom
refactor/pass-real-errors-in-code-internal

Conversation

@rohilsurana

Copy link
Copy Markdown
Member

Summary

Replace connect.NewError(connect.CodeInternal, ErrInternalServerError) with connect.NewError(connect.CodeInternal, err) across all handlers, and remove the now-redundant errorLogger.Log* calls that preceded those returns.

Why

The error sanitizer interceptor (#1680) ensures CodeInternal/CodeUnknown errors are sanitized to a generic "internal server error" before reaching the client. This means handlers can safely pass the real error — the logger interceptor captures it for debugging, and the sanitizer strips it from the response.

Previously, handlers used ErrInternalServerError sentinel which meant the real error was lost in both logs and responses. Now:

  • Server logs: contain the real error (e.g. "internal: pq: connection refused")
  • Client response: still sees "internal server error" (sanitized by interceptor)

The errorLogger.Log* calls before CodeInternal returns were also removed since the logger interceptor already logs the error with request_id and method context.

Changes

  • 75 files changed, -1049 lines net
  • 417 ErrInternalServerError → real err replacements
  • Removed redundant errorLogger.LogServiceError/LogUnexpectedError/LogTransformError calls before CodeInternal returns
  • Removed orphaned errorLogger := NewErrorLogger() declarations
  • Updated test assertions to match real mock errors instead of sentinel

Test plan

  • go test ./internal/api/v1beta1connect/... — all tests pass
  • go build ./... — full build passes

@vercel

vercel Bot commented Jun 8, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
frontier Ready Ready Preview, Comment Jun 9, 2026 7:41am

@coderabbitai

coderabbitai Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Handlers and unit tests across v1beta1connect now return connect.CodeInternal that wraps the original error via fmt.Errorf(": %w", err); per-request ErrorLogger usage and generic ErrInternalServerError mapping were removed and tests updated accordingly.

Changes

Internal error propagation cleanup

Layer / File(s) Summary
Handlers and tests: wrapped internal errors
internal/api/v1beta1connect/*, internal/api/v1beta1connect/*_test.go
All modified Connect handlers replace logging + ErrInternalServerError with connect.NewError(connect.CodeInternal, fmt.Errorf(...: %w, err)) on default/unexpected and transform failure paths; tests updated to assert wrapped underlying error messages and many files add fmt imports.

Estimated code review effort
🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • raystack/frontier#1682: Overlaps on org-ID helper functions in v1beta1connect and internal error mapping changes.
  • raystack/frontier#1620: Interacts with authenticate/authorize/organization handler error-return behavior and sanitization choices.
  • raystack/frontier#1615: Related changes to group deletion and error handling paths touched by this sweep.

Suggested reviewers

  • whoAbhishekSah
  • rsbh

@rohilsurana rohilsurana marked this pull request as ready for review June 8, 2026 08:54
@coveralls

coveralls commented Jun 8, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 27191405123

Coverage decreased (-0.2%) to 43.271%

Details

  • Coverage decreased (-0.2%) from the base build.
  • Patch coverage: 264 uncovered changes across 41 files (171 of 435 lines covered, 39.31%).
  • 7 coverage regressions across 1 file.

Uncovered Changes

Top 10 Files by Coverage Impact Changed Covered %
internal/api/v1beta1connect/user.go 42 12 28.57%
internal/api/v1beta1connect/group.go 32 10 31.25%
internal/api/v1beta1connect/billing_customer.go 22 1 4.55%
internal/api/v1beta1connect/project.go 21 4 19.05%
internal/api/v1beta1connect/role.go 18 2 11.11%
internal/api/v1beta1connect/organization.go 29 15 51.72%
internal/api/v1beta1connect/authenticate.go 12 0 0.0%
internal/api/v1beta1connect/billing_product.go 22 10 45.45%
internal/api/v1beta1connect/invitations.go 19 7 36.84%
internal/api/v1beta1connect/billing_subscription.go 9 0 0.0%
Total (47 files) 435 171 39.31%

Coverage Regressions

7 previously-covered lines in 1 file lost coverage.

File Lines Losing Coverage Coverage
internal/api/v1beta1connect/error_handler.go 7 75.0%

Coverage Stats

Coverage Status
Relevant Lines: 37013
Covered Lines: 16016
Line Coverage: 43.27%
Coverage Strength: 12.31 hits per line

💛 - Coveralls

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
internal/api/v1beta1connect/audit_record.go (1)

269-283: ⚠️ Potential issue | 🟠 Major

Fix potential truncation when io.Reader.Read returns n>0 with err==io.EOF in streamReaderInChunks.

streamReaderInChunks breaks on io.EOF before it sends the n bytes from that same Read call (see internal/api/v1beta1connect/audit_record.go loop around lines 269-272). Per Go’s io.Reader contract, (n>0, io.EOF) is allowed, so the current ordering can drop the last chunk.

💡 Suggested fix
 func streamReaderInChunks(reader io.Reader, contentType string, stream *connect.ServerStream[httpbody.HttpBody]) error {
 	buffer := make([]byte, HttpChunkSize)

 	for {
 		n, err := reader.Read(buffer)
-		if err == io.EOF {
-			break
-		}
-		if err != nil {
-			return connect.NewError(connect.CodeInternal, err)
-		}
 		if n > 0 {
 			msg := &httpbody.HttpBody{
 				ContentType: contentType,
 				Data:        buffer[:n],
 			}
 			if sendErr := stream.Send(msg); sendErr != nil {
 				return connect.NewError(connect.CodeInternal, sendErr)
 			}
 		}
+		if err == io.EOF {
+			break
+		}
+		if err != nil {
+			return connect.NewError(connect.CodeInternal, err)
+		}
 	}

 	return nil
 }
internal/api/v1beta1connect/authenticate.go (1)

165-171: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Do not re-wrap GetLoggedInPrincipal errors as internal.

GetLoggedInPrincipal already returns mapped transport errors; wrapping it again with CodeInternal hides those statuses for AuthToken.

Proposed fix
 	principal, err := h.GetLoggedInPrincipal(ctx,
 		authenticate.SessionClientAssertion,
 		authenticate.ClientCredentialsClientAssertion,
 		authenticate.JWTGrantClientAssertion)
 	if err != nil {
-		return nil, connect.NewError(connect.CodeInternal, err)
+		return nil, err
 	}
internal/api/v1beta1connect/billing_invoice_test.go (1)

299-303: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Assert wantErr message in the failure branches.

Line 299 and Line 515 only check code, so the updated wantErr values are never validated. This makes the new error-message expectations non-binding.

💡 Suggested patch
 if tt.wantErr != nil {
 	assert.Error(t, err)
 	assert.Equal(t, tt.errCode, connect.CodeOf(err))
+	assert.Contains(t, err.Error(), tt.wantErr.Error())
 	assert.Nil(t, got)
 } else {
 if tt.wantErr != nil {
 	assert.Error(t, err)
 	assert.Equal(t, tt.errCode, connect.CodeOf(err))
+	assert.Contains(t, err.Error(), tt.wantErr.Error())
 	assert.Nil(t, got)
 } else {

Also applies to: 515-519

internal/api/v1beta1connect/billing_webhook_test.go (1)

124-127: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Assert the expected underlying error message in failure-path tests.

The table now sets wantErr, but the error branch never checks it. This makes the updated expectations effectively unused.

Proposed test assertion fix
 			if tt.wantErr != nil {
 				assert.Error(t, err)
 				assert.Equal(t, tt.errCode, connect.CodeOf(err))
+				assert.Contains(t, err.Error(), tt.wantErr.Error())
 				assert.Nil(t, got)
 			} else {

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b670f155-9428-4e62-8bdf-6550078c7b15

📥 Commits

Reviewing files that changed from the base of the PR and between 4942a2f and dbc0a9a.

📒 Files selected for processing (75)
  • internal/api/v1beta1connect/audit_record.go
  • internal/api/v1beta1connect/audit_record_test.go
  • internal/api/v1beta1connect/authenticate.go
  • internal/api/v1beta1connect/authorize.go
  • internal/api/v1beta1connect/billing_check.go
  • internal/api/v1beta1connect/billing_check_test.go
  • internal/api/v1beta1connect/billing_checkout.go
  • internal/api/v1beta1connect/billing_checkout_test.go
  • internal/api/v1beta1connect/billing_customer.go
  • internal/api/v1beta1connect/billing_customer_test.go
  • internal/api/v1beta1connect/billing_invoice.go
  • internal/api/v1beta1connect/billing_invoice_test.go
  • internal/api/v1beta1connect/billing_plan.go
  • internal/api/v1beta1connect/billing_plan_test.go
  • internal/api/v1beta1connect/billing_product.go
  • internal/api/v1beta1connect/billing_product_test.go
  • internal/api/v1beta1connect/billing_subscription.go
  • internal/api/v1beta1connect/billing_usage.go
  • internal/api/v1beta1connect/billing_usage_test.go
  • internal/api/v1beta1connect/billing_webhook.go
  • internal/api/v1beta1connect/billing_webhook_test.go
  • internal/api/v1beta1connect/deleter.go
  • internal/api/v1beta1connect/deleter_test.go
  • internal/api/v1beta1connect/domain.go
  • internal/api/v1beta1connect/domain_test.go
  • internal/api/v1beta1connect/group.go
  • internal/api/v1beta1connect/group_test.go
  • internal/api/v1beta1connect/invitations.go
  • internal/api/v1beta1connect/invitations_test.go
  • internal/api/v1beta1connect/kyc.go
  • internal/api/v1beta1connect/kyc_test.go
  • internal/api/v1beta1connect/metaschema.go
  • internal/api/v1beta1connect/metaschema_test.go
  • internal/api/v1beta1connect/namespace.go
  • internal/api/v1beta1connect/namespace_test.go
  • internal/api/v1beta1connect/organization.go
  • internal/api/v1beta1connect/organization_billing.go
  • internal/api/v1beta1connect/organization_invoices.go
  • internal/api/v1beta1connect/organization_pats.go
  • internal/api/v1beta1connect/organization_pats_test.go
  • internal/api/v1beta1connect/organization_projects.go
  • internal/api/v1beta1connect/organization_serviceuser.go
  • internal/api/v1beta1connect/organization_serviceuser_credentials.go
  • internal/api/v1beta1connect/organization_test.go
  • internal/api/v1beta1connect/organization_tokens.go
  • internal/api/v1beta1connect/organization_users.go
  • internal/api/v1beta1connect/permission.go
  • internal/api/v1beta1connect/permission_check.go
  • internal/api/v1beta1connect/permission_check_test.go
  • internal/api/v1beta1connect/permission_test.go
  • internal/api/v1beta1connect/platform.go
  • internal/api/v1beta1connect/policy.go
  • internal/api/v1beta1connect/preferences.go
  • internal/api/v1beta1connect/preferences_test.go
  • internal/api/v1beta1connect/project.go
  • internal/api/v1beta1connect/project_test.go
  • internal/api/v1beta1connect/project_users.go
  • internal/api/v1beta1connect/prospect.go
  • internal/api/v1beta1connect/prospect_test.go
  • internal/api/v1beta1connect/relation.go
  • internal/api/v1beta1connect/relation_test.go
  • internal/api/v1beta1connect/resource.go
  • internal/api/v1beta1connect/resource_test.go
  • internal/api/v1beta1connect/role.go
  • internal/api/v1beta1connect/serviceuser.go
  • internal/api/v1beta1connect/serviceuser_test.go
  • internal/api/v1beta1connect/session.go
  • internal/api/v1beta1connect/user.go
  • internal/api/v1beta1connect/user_orgs.go
  • internal/api/v1beta1connect/user_pat.go
  • internal/api/v1beta1connect/user_pat_test.go
  • internal/api/v1beta1connect/user_projects.go
  • internal/api/v1beta1connect/user_test.go
  • internal/api/v1beta1connect/v1beta1connect.go
  • internal/api/v1beta1connect/webhook.go

Comment thread internal/api/v1beta1connect/prospect.go
Comment thread internal/api/v1beta1connect/user.go
@rohilsurana rohilsurana force-pushed the refactor/pass-real-errors-in-code-internal branch from dbc0a9a to 4940bd1 Compare June 8, 2026 19:47

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/api/v1beta1connect/billing_invoice_test.go (1)

299-303: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

wantErr is never asserted, so wrapped-error behavior is currently untested.

Line 299 and Line 515 branches only check connect.CodeInternal and got == nil. The newly added wantErr values at Line 50/277/338/493 are not validated, so these tests can pass even if handlers regress back to generic internal errors.

Suggested assertion fix
 			got, err := handler.ListInvoices(context.Background(), tt.request)
 			if tt.wantErr != nil {
 				assert.Error(t, err)
 				assert.Equal(t, tt.errCode, connect.CodeOf(err))
+				assert.ErrorContains(t, err, tt.wantErr.Error())
 				assert.Nil(t, got)
 			} else {
@@
 			got, err := handler.GetUpcomingInvoice(context.Background(), tt.request)
 			if tt.wantErr != nil {
 				assert.Error(t, err)
 				assert.Equal(t, tt.errCode, connect.CodeOf(err))
+				assert.ErrorContains(t, err, tt.wantErr.Error())
 				assert.Nil(t, got)
 			} else {

Also applies to: 515-518

🧹 Nitpick comments (2)
internal/api/v1beta1connect/billing_invoice.go (1)

43-60: ⚡ Quick win

Remove the remaining pre-return errorLogger calls on CodeInternal paths.

Line 43, Line 91, and Line 169 still initialize NewErrorLogger(), and Lines 58-59, 106-107, 188-190 still log immediately before returning connect.CodeInternal. This leaves duplicate logging behavior in this file while the rest of the PR standardizes on wrapped errors + interceptor logging.

Suggested cleanup
 func (h *ConnectHandler) ListInvoices(ctx context.Context, request *connect.Request[frontierv1beta1.ListInvoicesRequest]) (*connect.Response[frontierv1beta1.ListInvoicesResponse], error) {
-	errorLogger := NewErrorLogger()
@@
-		errorLogger.LogServiceError(ctx, request, "ListInvoices.GetByOrgID", err,
-			"org_id", request.Msg.GetOrgId())
 		return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("ListInvoices.GetByOrgID: org_id=%s: %w", request.Msg.GetOrgId(), err))
 	}
@@
 func (h *ConnectHandler) GetUpcomingInvoice(ctx context.Context, request *connect.Request[frontierv1beta1.GetUpcomingInvoiceRequest]) (*connect.Response[frontierv1beta1.GetUpcomingInvoiceResponse], error) {
-	errorLogger := NewErrorLogger()
@@
-		errorLogger.LogServiceError(ctx, request, "GetUpcomingInvoice.GetByOrgID", err,
-			"org_id", request.Msg.GetOrgId())
 		return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("GetUpcomingInvoice.GetByOrgID: org_id=%s: %w", request.Msg.GetOrgId(), err))
 	}
@@
 func (h *ConnectHandler) SearchInvoices(ctx context.Context, request *connect.Request[frontierv1beta1.SearchInvoicesRequest]) (*connect.Response[frontierv1beta1.SearchInvoicesResponse], error) {
-	errorLogger := NewErrorLogger()
@@
-		errorLogger.LogServiceError(ctx, request, "SearchInvoices.SearchInvoices", err,
-			"query_offset", rqlQuery.Offset,
-			"query_limit", rqlQuery.Limit)
 		return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("SearchInvoices.SearchInvoices: query_offset=%d query_limit=%d: %w", rqlQuery.Offset, rqlQuery.Limit, err))
 	}

Also applies to: 91-109, 169-192

internal/api/v1beta1connect/role_test.go (1)

207-219: ⚡ Quick win

Use non-sentinel service errors in these internal-error tests.

Both test setups still return ErrInternalServerError, so these cases remain coupled to the sentinel instead of validating arbitrary internal failures.

Suggested change
 import (
 	"context"
+	"errors"
 	"fmt"
 	"testing"
 	"time"
@@
 		{
 			name: "should return internal error if role service fails",
 			setup: func(rs *mocks.RoleService) {
+				serviceErr := errors.New("test error")
 				rs.EXPECT().List(mock.AnythingOfType("context.backgroundCtx"), role.Filter{
 					OrgID:  testRoleMap[instanceLevelRoleID].OrgID,
 					Scopes: []string{},
-				}).Return(nil, ErrInternalServerError)
+				}).Return(nil, serviceErr)
 			},
@@
-			wantErr: connect.NewError(connect.CodeInternal, fmt.Errorf("ListRoles: scopes=%v: %w", []string{}, ErrInternalServerError)),
+			wantErr: connect.NewError(connect.CodeInternal, fmt.Errorf("ListRoles: scopes=%v: %w", []string{}, errors.New("test error"))),
 		},
@@
 		{
 			name: "should return internal error if role service gives unknown error",
 			setup: func(rs *mocks.RoleService) {
-				rs.EXPECT().Delete(mock.AnythingOfType("context.backgroundCtx"), testRoleID).Return(ErrInternalServerError)
+				rs.EXPECT().Delete(mock.AnythingOfType("context.backgroundCtx"), testRoleID).Return(errors.New("test error"))
 			},
@@
-			wantErr: connect.NewError(connect.CodeInternal, fmt.Errorf("DeleteRole: role_id=%s: %w", testRoleID, ErrInternalServerError)),
+			wantErr: connect.NewError(connect.CodeInternal, fmt.Errorf("DeleteRole: role_id=%s: %w", testRoleID, errors.New("test error"))),
 		},

Also applies to: 264-273


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 9ec1dabd-77c9-4dc2-9120-58d0c50c8e5f

📥 Commits

Reviewing files that changed from the base of the PR and between dbc0a9a and 4940bd1.

📒 Files selected for processing (76)
  • internal/api/v1beta1connect/audit_record.go
  • internal/api/v1beta1connect/audit_record_test.go
  • internal/api/v1beta1connect/authenticate.go
  • internal/api/v1beta1connect/authorize.go
  • internal/api/v1beta1connect/billing_check.go
  • internal/api/v1beta1connect/billing_check_test.go
  • internal/api/v1beta1connect/billing_checkout.go
  • internal/api/v1beta1connect/billing_checkout_test.go
  • internal/api/v1beta1connect/billing_customer.go
  • internal/api/v1beta1connect/billing_customer_test.go
  • internal/api/v1beta1connect/billing_invoice.go
  • internal/api/v1beta1connect/billing_invoice_test.go
  • internal/api/v1beta1connect/billing_plan.go
  • internal/api/v1beta1connect/billing_plan_test.go
  • internal/api/v1beta1connect/billing_product.go
  • internal/api/v1beta1connect/billing_product_test.go
  • internal/api/v1beta1connect/billing_subscription.go
  • internal/api/v1beta1connect/billing_usage.go
  • internal/api/v1beta1connect/billing_usage_test.go
  • internal/api/v1beta1connect/billing_webhook.go
  • internal/api/v1beta1connect/billing_webhook_test.go
  • internal/api/v1beta1connect/deleter.go
  • internal/api/v1beta1connect/deleter_test.go
  • internal/api/v1beta1connect/domain.go
  • internal/api/v1beta1connect/domain_test.go
  • internal/api/v1beta1connect/group.go
  • internal/api/v1beta1connect/group_test.go
  • internal/api/v1beta1connect/invitations.go
  • internal/api/v1beta1connect/invitations_test.go
  • internal/api/v1beta1connect/kyc.go
  • internal/api/v1beta1connect/kyc_test.go
  • internal/api/v1beta1connect/metaschema.go
  • internal/api/v1beta1connect/metaschema_test.go
  • internal/api/v1beta1connect/namespace.go
  • internal/api/v1beta1connect/namespace_test.go
  • internal/api/v1beta1connect/organization.go
  • internal/api/v1beta1connect/organization_billing.go
  • internal/api/v1beta1connect/organization_invoices.go
  • internal/api/v1beta1connect/organization_pats.go
  • internal/api/v1beta1connect/organization_pats_test.go
  • internal/api/v1beta1connect/organization_projects.go
  • internal/api/v1beta1connect/organization_serviceuser.go
  • internal/api/v1beta1connect/organization_serviceuser_credentials.go
  • internal/api/v1beta1connect/organization_test.go
  • internal/api/v1beta1connect/organization_tokens.go
  • internal/api/v1beta1connect/organization_users.go
  • internal/api/v1beta1connect/permission.go
  • internal/api/v1beta1connect/permission_check.go
  • internal/api/v1beta1connect/permission_check_test.go
  • internal/api/v1beta1connect/permission_test.go
  • internal/api/v1beta1connect/platform.go
  • internal/api/v1beta1connect/policy.go
  • internal/api/v1beta1connect/preferences.go
  • internal/api/v1beta1connect/preferences_test.go
  • internal/api/v1beta1connect/project.go
  • internal/api/v1beta1connect/project_test.go
  • internal/api/v1beta1connect/project_users.go
  • internal/api/v1beta1connect/prospect.go
  • internal/api/v1beta1connect/prospect_test.go
  • internal/api/v1beta1connect/relation.go
  • internal/api/v1beta1connect/relation_test.go
  • internal/api/v1beta1connect/resource.go
  • internal/api/v1beta1connect/resource_test.go
  • internal/api/v1beta1connect/role.go
  • internal/api/v1beta1connect/role_test.go
  • internal/api/v1beta1connect/serviceuser.go
  • internal/api/v1beta1connect/serviceuser_test.go
  • internal/api/v1beta1connect/session.go
  • internal/api/v1beta1connect/user.go
  • internal/api/v1beta1connect/user_orgs.go
  • internal/api/v1beta1connect/user_pat.go
  • internal/api/v1beta1connect/user_pat_test.go
  • internal/api/v1beta1connect/user_projects.go
  • internal/api/v1beta1connect/user_test.go
  • internal/api/v1beta1connect/v1beta1connect.go
  • internal/api/v1beta1connect/webhook.go
✅ Files skipped from review due to trivial changes (3)
  • internal/api/v1beta1connect/billing_webhook_test.go
  • internal/api/v1beta1connect/permission_check_test.go
  • internal/api/v1beta1connect/serviceuser_test.go
🚧 Files skipped from review as they are similar to previous changes (59)
  • internal/api/v1beta1connect/billing_usage_test.go
  • internal/api/v1beta1connect/organization_serviceuser_credentials.go
  • internal/api/v1beta1connect/user_test.go
  • internal/api/v1beta1connect/user_projects.go
  • internal/api/v1beta1connect/organization_serviceuser.go
  • internal/api/v1beta1connect/audit_record_test.go
  • internal/api/v1beta1connect/organization_invoices.go
  • internal/api/v1beta1connect/namespace.go
  • internal/api/v1beta1connect/preferences.go
  • internal/api/v1beta1connect/billing_customer_test.go
  • internal/api/v1beta1connect/relation_test.go
  • internal/api/v1beta1connect/prospect_test.go
  • internal/api/v1beta1connect/v1beta1connect.go
  • internal/api/v1beta1connect/organization_billing.go
  • internal/api/v1beta1connect/organization_pats_test.go
  • internal/api/v1beta1connect/billing_check_test.go
  • internal/api/v1beta1connect/invitations_test.go
  • internal/api/v1beta1connect/billing_checkout_test.go
  • internal/api/v1beta1connect/organization_users.go
  • internal/api/v1beta1connect/user_pat_test.go
  • internal/api/v1beta1connect/deleter_test.go
  • internal/api/v1beta1connect/permission_test.go
  • internal/api/v1beta1connect/billing_plan_test.go
  • internal/api/v1beta1connect/billing_webhook.go
  • internal/api/v1beta1connect/organization_pats.go
  • internal/api/v1beta1connect/metaschema_test.go
  • internal/api/v1beta1connect/billing_check.go
  • internal/api/v1beta1connect/policy.go
  • internal/api/v1beta1connect/authorize.go
  • internal/api/v1beta1connect/billing_plan.go
  • internal/api/v1beta1connect/kyc.go
  • internal/api/v1beta1connect/organization_tokens.go
  • internal/api/v1beta1connect/billing_checkout.go
  • internal/api/v1beta1connect/billing_product_test.go
  • internal/api/v1beta1connect/group_test.go
  • internal/api/v1beta1connect/audit_record.go
  • internal/api/v1beta1connect/metaschema.go
  • internal/api/v1beta1connect/billing_subscription.go
  • internal/api/v1beta1connect/billing_customer.go
  • internal/api/v1beta1connect/invitations.go
  • internal/api/v1beta1connect/organization_projects.go
  • internal/api/v1beta1connect/session.go
  • internal/api/v1beta1connect/deleter.go
  • internal/api/v1beta1connect/permission.go
  • internal/api/v1beta1connect/webhook.go
  • internal/api/v1beta1connect/permission_check.go
  • internal/api/v1beta1connect/organization_test.go
  • internal/api/v1beta1connect/user_pat.go
  • internal/api/v1beta1connect/project_users.go
  • internal/api/v1beta1connect/prospect.go
  • internal/api/v1beta1connect/resource.go
  • internal/api/v1beta1connect/role.go
  • internal/api/v1beta1connect/project.go
  • internal/api/v1beta1connect/authenticate.go
  • internal/api/v1beta1connect/platform.go
  • internal/api/v1beta1connect/domain.go
  • internal/api/v1beta1connect/organization.go
  • internal/api/v1beta1connect/user.go
  • internal/api/v1beta1connect/group.go

Comment thread internal/api/v1beta1connect/billing_invoice_test.go Outdated
@rohilsurana rohilsurana force-pushed the refactor/pass-real-errors-in-code-internal branch from 9c6218f to 715c7c7 Compare June 9, 2026 07:03
@rohilsurana rohilsurana merged commit d1acb6b into main Jun 9, 2026
8 checks passed
@rohilsurana rohilsurana deleted the refactor/pass-real-errors-in-code-internal branch June 9, 2026 08:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants