{
  "metadata": {
    "generatedAt": "2026-09-01T06:28:20.2938638Z",
    "totalRequirements": 181,
    "positiveCount": 152,
    "guardrailCount": 29,
    "totalProofs": 823
  },
  "requirements": [
    {
      "id": "AUTH-001",
      "category": "AUTH",
      "type": "Positive",
      "description": "Verify DatabaseUserSecretStore encrypts and decrypts secret correctly.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserSecretStoreTests.cs",
          "lineNumber": 8,
          "testName": "DatabaseUserSecretStore_SavesAndRetrieves_Secret",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-002",
      "category": "AUTH",
      "type": "Positive",
      "description": "Verify UserCredentialsController returns configured server IDs.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserCredentialsControllerTests.cs",
          "lineNumber": 11,
          "testName": "GetUserCredentials_ReturnsServerIds",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-01",
      "category": "AUTH",
      "type": "Negative",
      "description": "AdminPolicy allows principal with configured Admin Group Name (e.g., full_admin)",
      "proofCount": 47,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs",
          "lineNumber": 13,
          "testName": "AdminPolicy_Allows_Principal_With_AdminGroupName",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs",
          "lineNumber": 47,
          "testName": "AdminPolicy_Allows_Principal_With_AdminSid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs",
          "lineNumber": 81,
          "testName": "AdminPolicy_Allows_Principal_With_ConfiguredAdminGroups",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminPolicyHybridAuthTests.cs",
          "lineNumber": 116,
          "testName": "AdminPolicy_Denies_StandardRole_WithoutAdminSidOrGroup",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 403,
          "testName": "QuotaEndpoints_Admin_CanManageCustomUserQuotas",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminPolicySidOnlyTests.cs",
          "lineNumber": 16,
          "testName": "AdminPolicy_Denies_StandardRole_Without_AdminSid",
          "details": "Verifies that users with standard/unconfigured role names lacking explicit Admin SID claim or Admin Group are denied by AdminPolicy."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminPolicySidOnlyTests.cs",
          "lineNumber": 58,
          "testName": "AdminPolicy_Allows_Principal_With_AdminSid",
          "details": "Verifies that principals with the configured Admin SID are granted administrative policy access."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 258,
          "testName": "AppKeysController_CreateAppKey_UnknownCategory_Admin_Succeeds",
          "details": "Verifies that admin callers can create forward-looking AppKeys for unconfigured categories."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 121,
          "testName": "SSE_ValidatesIdentityPerMessage",
          "details": "Verifies that a single shared ClientSession evaluates identity from the live\nper-message HttpContext, not the cached handshake context.\n\nScenario:\n- Session is established with a dummy handshake context (neither Alice nor Bob).\n- Alice\u0027s per-request context resolves to an admin SID \u2192 tool call is authorized.\n- Bob\u0027s per-request context resolves to no SID/groups \u2192 tool call is denied (isError:true)."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 228,
          "testName": "SecurityValidationHelper_IsAdmin_RequiresAdminGroupSid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 246,
          "testName": "SecurityValidationHelper_IsAdmin_AllowsAdminGroupName",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 260,
          "testName": "SecurityValidationHelper_IsAdmin_RejectsNonAdminGroups",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 277,
          "testName": "SecurityValidationHelper_IsAdmin_AllowsCustomAdminGroupsArray",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 292,
          "testName": "SecurityValidationHelper_IsAdmin_AllowsMappedGroups",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 307,
          "testName": "OidcIdentityProvider_DoesNotGrantAdminSid_FromGroupOrUserNames",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 170,
          "testName": "Pipeline_Dashboard_Management_Suite",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 304,
          "testName": "Pipeline_Permissions_Policy_And_Mapping_CRUD",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 348,
          "testName": "Pipeline_GET_Clients_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 357,
          "testName": "Pipeline_GET_Permissions_Policies_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 94,
          "testName": "RBAC_AllowsUser_WhenPolicyMatchesRequiredGroup",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 200,
          "testName": "ToolsList_FiltersByAuthorization",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 153,
          "testName": "AdminBypass_AllowsAllCapabilities_EvenWithoutDbPolicies",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 211,
          "testName": "ServerLevelPolicy_AuthorizesAllCapabilitiesUnderServer",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 283,
          "testName": "ListToolsAsync_FiltersUnauthorizedTools",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 328,
          "testName": "ListPromptsAsync_FiltersUnauthorizedPrompts",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 371,
          "testName": "ListResourcesAsync_FiltersUnauthorizedResources",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 414,
          "testName": "ListResourceTemplatesAsync_FiltersUnauthorizedTemplates",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 48,
          "testName": "GetPolicies_ReturnsOk",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 114,
          "testName": "DeletePolicy_DeletesSuccessfully",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 21,
          "testName": "initializes with empty policies and mappings",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 38,
          "testName": "fetches access policies and updates store",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 53,
          "testName": "creates/saves a policy (ALLOW rule) and closes modal",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 156,
          "testName": "fetches group mappings and updates store",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 171,
          "testName": "saves a group mapping and closes mapping modal",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 314,
          "testName": "handles policy modal open and close",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 330,
          "testName": "handles mapping modal open and close",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 23,
          "testName": "successfully loads user profile from /api/me",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 50,
          "testName": "handles error response gracefully and sets unauthenticated user state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 69,
          "testName": "handles network failure gracefully",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 89,
          "testName": "correctly handles non-admin user role extraction",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 113,
          "testName": "successfully updates version and service from /health endpoint",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 128,
          "testName": "keeps existing fallback version on error",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/IdentityAuthTab.test.tsx",
          "lineNumber": 12,
          "testName": "renders Active Directory disabled initially, toggles on and exposes fields",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/IdentityAuthTab.test.tsx",
          "lineNumber": 46,
          "testName": "fills LDAP parameters and executes test connection",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PolicyModal.test.tsx",
          "lineNumber": 28,
          "testName": "renders create policy form with default inputs",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PolicyModal.test.tsx",
          "lineNumber": 44,
          "testName": "renders edit policy form pre-filled with policy data",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PolicyModal.test.tsx",
          "lineNumber": 87,
          "testName": "closes modal on cancel click",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-02",
      "category": "AUTH",
      "type": "Positive",
      "description": "AppKey scopes restrict access precisely across all MCP capabilities and backend targets",
      "proofCount": 48,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 242,
          "testName": "Pairwise_AppKeyScopes_RestrictsAccessPrecisely",
          "details": "Verifies pairwise combination of AppKey scopes across all MCP capabilities and backend targets."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs",
          "lineNumber": 146,
          "testName": "AppKeyRepository_SaveAndGet_PersistsKeyTypeAndFilters",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 278,
          "testName": "CreateAppKey_CreatesNewKey_Successfully_WithDifferentScopeSlugs",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 391,
          "testName": "GetAppKeysLimits_ReturnsLimitsAndCounts",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 197,
          "testName": "AppKeysController_CreateAppKey_ValidCategory_Succeeds",
          "details": "Verifies that AppKeys can be created with valid category scopes."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 281,
          "testName": "ClientsController_CreateClient_ValidCategory_Succeeds",
          "details": "Verifies that OAuth client credentials can be created with category-scoped access rules."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 364,
          "testName": "ClientSession_CategoryScope_AuthorizesMatchingServerTools_AndDeniesOthers",
          "details": "Verifies that category-scoped AppKey authorizes access exclusively to servers belonging to the permitted category."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 388,
          "testName": "ClientSession_GroupAliasScope_AuthorizesIdenticallyToCategory",
          "details": "Verifies that group-alias scopes evaluate identically to category scopes during tool authorization."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 410,
          "testName": "ClientSession_CategoryScope_IsCaseInsensitive",
          "details": "Verifies that category scope matching is case-insensitive across server categories."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 460,
          "testName": "ClientSession_ResourcesAndTemplates_FilteredByCategoryScope",
          "details": "Verifies that resources and templates are filtered according to category-scoped AppKey permissions."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 488,
          "testName": "ClientSession_DynamicServerMembership_UpdatesAccessDynamically",
          "details": "Verifies that dynamic updates to server categories immediately update tool access without re-authenticating."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 524,
          "testName": "ClientSession_MixedScopes_CombinesCategoryAndSpecificToolScopes",
          "details": "Verifies that AppKeys can combine category scopes and granular tool-level scopes additively."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 551,
          "testName": "ClientSession_Complete_FiltersServerNamesByCategoryScope",
          "details": "Verifies that autocomplete and completion requests filter suggestions to servers within category scopes."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditSidAttributionTests.cs",
          "lineNumber": 34,
          "testName": "AppKeyAuthenticationHandler_Emits_Sid_Claim_When_OwnerSid_Present",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditSidAttributionTests.cs",
          "lineNumber": 69,
          "testName": "AppKeyIdentityProvider_ResolvesOwnerAndSid_FromHttpContextItems",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditSidAttributionTests.cs",
          "lineNumber": 87,
          "testName": "AppKeyIdentityProvider_ReturnsAnonymous_WhenNoAppKey",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 86,
          "testName": "AppKeys_PrefixLookup_WorksCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 122,
          "testName": "AppKeys_KeyExpiration_CheckedCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 151,
          "testName": "AppKeys_Limits_CheckWorks",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 189,
          "testName": "AppKeys_Sha256Hashing_VerificationWorks",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 48,
          "testName": "Pipeline_QueryToken_MiddlewareBypass",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 319,
          "testName": "Pipeline_AppKey_Create_And_Revoke",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 402,
          "testName": "Pipeline_GET_AppKeys_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 411,
          "testName": "Pipeline_GET_AppKeysLimits_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 251,
          "testName": "AppKeyScopes_RestrictTargetAccessPrecisely",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 22,
          "testName": "initializes with default state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 57,
          "testName": "handles fetch error gracefully without crashing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 123,
          "testName": "handles register error with toast and propagates error",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 195,
          "testName": "handles delete failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 261,
          "testName": "opens and closes add client modal and resets created result",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 316,
          "testName": "initializes with default state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 388,
          "testName": "loads app key limits",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 402,
          "testName": "handles fetch error gracefully without crashing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 466,
          "testName": "handles create key error with toast and throws",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 541,
          "testName": "handles revoke failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 559,
          "testName": "loads user quotas and updates store",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 577,
          "testName": "handles fetchUserQuotas error gracefully without crashing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 616,
          "testName": "handles setUserQuota error with toast and throws",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 687,
          "testName": "handles deleteUserQuota failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 705,
          "testName": "opens and closes create modal and clears result",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 51,
          "testName": "switches between format tabs (Standard, VS Code, Generic SSE)",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 78,
          "testName": "switches server scope from all servers to individual server",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 97,
          "testName": "updates domain when LAN or custom is chosen",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 122,
          "testName": "toggles meta mode when server scope is all",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 143,
          "testName": "populates app keys dropdown and injects selected key",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 166,
          "testName": "copies configuration to clipboard and triggers success toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientModal.test.tsx",
          "lineNumber": 15,
          "testName": "renders nothing when isAddClientOpen is false",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/multi-user-matrix.spec.ts",
          "lineNumber": 70,
          "testName": "AppKey Direct Context: connects with API key header identity",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-03",
      "category": "AUTH",
      "type": "Positive",
      "description": "Auth middleware allows bypass routes and extracts SSO headers in a case-insensitive manner.",
      "proofCount": 26,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 603,
          "testName": "AuthMiddleware_CaseInsensitivity_BypassAndHeader_Check",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 319,
          "testName": "Pairwise_SsoIdentityAndGroupMappings_EvaluateCorrectly",
          "details": "Verifies pairwise combination of SSO identities, SIDs, and group mappings across all targets."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 330,
          "testName": "HeaderIdentityProvider_DynamicallyLoadsAndAppliesDbConfig",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 53,
          "testName": "GetAllProviders_ReturnsOkWithSecretAndAuthProviders",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 161,
          "testName": "GetAuthProviders_ReturnsOkWithList",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 185,
          "testName": "SaveAuthProvider_SavesSuccessfully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 10,
          "testName": "OidcIdentityProvider_Parses_Remote_User_And_Groups_Headers",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 31,
          "testName": "CompositeIdentityProvider_Falls_Back_To_Oidc_When_AD_Not_Authenticated",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 74,
          "testName": "HeaderAuth_AllowsHeaders_ForTrustedProxy",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 97,
          "testName": "OidcIdentityProvider_DoesNotMapAdminSid_ForAdminGroups",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditSidAttributionTests.cs",
          "lineNumber": 11,
          "testName": "HeaderIdentityProvider_Extracts_RemoteUserSid_And_Populates_Sid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeIdentityProviderTests.cs",
          "lineNumber": 9,
          "testName": "ProviderName_ReturnsComposite",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeIdentityProviderTests.cs",
          "lineNumber": 17,
          "testName": "ResolveIdentityAsync_ReturnsFirstNonAnonymousUser",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeIdentityProviderTests.cs",
          "lineNumber": 38,
          "testName": "ResolveIdentityAsync_FallsBackToAnonymous_WhenNoUserResolved",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeIdentityProviderTests.cs",
          "lineNumber": 55,
          "testName": "ResolveIdentityAsync_FallsBackToOidcProvider_WhenAnonymous",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 366,
          "testName": "Pipeline_GET_Permissions_Mappings_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 384,
          "testName": "Pipeline_GET_Providers_Auth_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/GroupMappingsAndSpecAuthTests.cs",
          "lineNumber": 93,
          "testName": "GroupMapping_AllowsUser_WhenMappingResolvesToAllowedInternalGroup",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/GroupMappingsAndSpecAuthTests.cs",
          "lineNumber": 111,
          "testName": "GroupMapping_AllowsUser_WhenOidcGroupMapsToAllowedInternalGroup",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 644,
          "testName": "AuthMiddleware_Allows_SSO_Session_With_RemoteUser_Header",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 137,
          "testName": "GetMappings_ReturnsOk",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 207,
          "testName": "DeleteMapping_DeletesSuccessfully",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 60,
          "testName": "handles provider fetch warnings gracefully when endpoints are unavailable",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 80,
          "testName": "saves auth provider config and refreshes providers",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 109,
          "testName": "handles auth provider save error and displays toast",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/multi-user-matrix.spec.ts",
          "lineNumber": 36,
          "testName": "Operator Context: allows overview and testbench navigation with operator identity",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-04",
      "category": "AUTH",
      "type": "Positive",
      "description": "ActiveDirectoryIdentityProvider extracts Windows caller SIDs and security groups via IWindowsIdentityAccessor and augments with LDAP",
      "proofCount": 14,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ActiveDirectoryWindowsIdentityTests.cs",
          "lineNumber": 12,
          "testName": "ResolveIdentityAsync_ExtractsWindowsIdentitySids_ViaAccessor",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ActiveDirectoryWindowsIdentityTests.cs",
          "lineNumber": 50,
          "testName": "ResolveIdentityAsync_AugmentsWithLdapSids_WhenLdapServiceProvided",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 365,
          "testName": "LdapActiveDirectoryService_RespectsDisabledStatusInDatabase",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs",
          "lineNumber": 11,
          "testName": "ResolveUserSidsAsync_ReturnsEmpty_WhenLdapProviderDisabledInDb",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs",
          "lineNumber": 59,
          "testName": "ResolveUserSidsAsync_UsesCache_WhenCachedSidsExist",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 298,
          "testName": "TestLdapConnection_ValidatesInputAndHandlesFailureGracefully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 23,
          "testName": "ConvertSidBytesToString_FormatsValidBinarySid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 34,
          "testName": "ConvertSidBytesToString_ReturnsEmpty_OnInvalidBytes",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 42,
          "testName": "ResolveUserSidsAsync_ReturnsEmpty_WhenUsernameEmpty",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 53,
          "testName": "ResolveUserSidsAsync_ReturnsEmpty_WhenServerNotConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 79,
          "testName": "ActiveDirectoryIdentityProvider_ReturnsAnonymous_WhenUntrustedProxy",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 96,
          "testName": "ActiveDirectoryIdentityProvider_ReturnsAnonymous_WhenNotWindowsAuth",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 112,
          "testName": "ActiveDirectoryIdentityProvider_ResolvesLdapSids_WhenLdapServiceProvided",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/ldap-identity-and-auth-flow.spec.ts",
          "lineNumber": 5,
          "testName": "should configure LDAP identity provider, test connection, and save settings",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-05",
      "category": "AUTH",
      "type": "Positive",
      "description": "McpServer supports AllowPassThroughAuth flag",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpServerTests.cs",
          "lineNumber": 5,
          "testName": "McpServer_Should_Have_AllowPassThroughAuth",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/my-mcp-servers.spec.ts",
          "lineNumber": 7,
          "testName": "should render user provided servers and allow editing credentials with SQLite schema",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-06",
      "category": "AUTH",
      "type": "Positive",
      "description": "Transports use passThroughToken when AllowPassThroughAuth is true",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 208,
          "testName": "Transports_Use_PassThroughToken_If_Allowed",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-101",
      "category": "AUTH",
      "type": "Positive",
      "description": "HTTP transport injects X-Forwarded-User header based on connected user identity.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityHeaderTests.cs",
          "lineNumber": 9,
          "testName": "HttpTransport_InjectsXForwardedUserHeader",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-110",
      "category": "AUTH",
      "type": "Positive",
      "description": "CreateAppKey allows creating unlimited AppKeys when UserMaxKeys is set to 0.",
      "proofCount": 4,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 343,
          "testName": "CreateAppKey_AllowsUnlimited_WhenLimitsAreZero",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 135,
          "testName": "ApplyConfigurationResponseContext_SetsRegistrationEndpoint",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 51,
          "testName": "GetClients_ReturnsOk_WithClientsAndMappedProperties",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 238,
          "testName": "GetClients_NeverLeaksRawBearerSecretOrHash",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-118",
      "category": "AUTH",
      "type": "Positive",
      "description": "FindDcrClientAsync resolves existing DCR client matching client name and type.",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 214,
          "testName": "FindDcrClient_ReturnsMatchingClient",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 556,
          "testName": "RegisterClient_DuplicateDcrRequest_ReusesExistingClientIdAndUpdatesRecord",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-119",
      "category": "AUTH",
      "type": "Positive",
      "description": "CleanupDcrClientsAsync prunes duplicate and expired dynamic client registrations across all database providers.",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 237,
          "testName": "CleanupDcrClients_PrunesDuplicateRegistrations_AndExpiredClients",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 333,
          "testName": "CleanupClients_CallsRepoAndReturnsCleanedCount",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-14",
      "category": "AUTH",
      "type": "Positive",
      "description": "Tool execution catches 401 Unauthorized from downstream target servers and returns interactive auth remediation.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 173,
          "testName": "ExecuteTargetToolAsync_Catches401_AndReturnsAuthPrompt",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-15",
      "category": "AUTH",
      "type": "Positive",
      "description": "OpenIddict initializes ephemeral development signing certificates in Development environment.",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OpenIddictProductionTests.cs",
          "lineNumber": 30,
          "testName": "Development_WithNoCert_BootsOnDevCerts",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OpenIddictProductionTests.cs",
          "lineNumber": 46,
          "testName": "Production_WithValidPfx_Boots",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-35",
      "category": "AUTH",
      "type": "Positive",
      "description": "Single-user homelab startup initializes SQLite, auto-generates Admin and Client AppKeys without PFX certificate requirements",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SingleUserHomelabTests.cs",
          "lineNumber": 30,
          "testName": "Homelab_ZeroConfigStartup_SeedsAdminAndClientKeys_AndPersistsFiles",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-36",
      "category": "AUTH",
      "type": "Positive",
      "description": "Pre-configured MCG_CLIENT_APP_KEYS seeds functional individualized client keys with custom scopes",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SingleUserHomelabTests.cs",
          "lineNumber": 98,
          "testName": "Homelab_PreConfiguredClientKeys_SeedsIndividualizedScopedKeys",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-37",
      "category": "AUTH",
      "type": "Positive",
      "description": "AppKeys with server and category scopes enforce precise tool execution boundaries",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SingleUserHomelabTests.cs",
          "lineNumber": 168,
          "testName": "AppKey_ScopeExtraction_ExtractsSemanticPrefixes",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-38",
      "category": "AUTH",
      "type": "Positive",
      "description": "LAN CIDR network configuration allows standalone web dashboard access from local subnet",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SingleUserHomelabTests.cs",
          "lineNumber": 183,
          "testName": "Standalone_LanCidr_GrantsAdminAccessToLocalSubnet",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-39",
      "category": "AUTH",
      "type": "Positive",
      "description": "Zero-config startup defaults enterprise auth providers and secret providers to disabled",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SingleUserHomelabTests.cs",
          "lineNumber": 211,
          "testName": "ZeroConfig_Startup_DefaultsEnterpriseProviders_ToDisabled",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-APPKEY-ADMIN-SCOPE-ALLOW",
      "category": "AUTH",
      "type": "Positive",
      "description": "AppKeys with admin scope grant Administrator role and pass AdminPolicy.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 79,
          "testName": "AppKey_WithAdminScope_GrantsAdminAccess",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-APPKEY-ITEMS-SCOPE-ALLOW",
      "category": "AUTH",
      "type": "Positive",
      "description": "SecurityValidationHelper recognizes admin scopes in HttpContext.Items.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 255,
          "testName": "IsAdmin_AppKeyScopes_InHttpContextItems_ReturnsTrue",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-APPKEY-WILDCARD-SCOPE-ALLOW",
      "category": "AUTH",
      "type": "Positive",
      "description": "AppKeys with wildcard scope \u0027*\u0027 grant Administrator role and pass AdminPolicy.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 140,
          "testName": "AppKey_WithWildcardScope_GrantsAdminAccess",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-COMPACT-APPKEY-TAXONOMY",
      "category": "AUTH",
      "type": "Positive",
      "description": "Generates compact ~32-character Base62 AppKeys with semantic prefixes.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 417,
          "testName": "CreateCredentialAsync_GeneratesCompactKeysWithSemanticPrefixes",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-CUSTOM-ADMIN-KEY-SEEDING",
      "category": "AUTH",
      "type": "Positive",
      "description": "Seeds custom MCG_ADMIN_AUTH_KEY when provided in configuration.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 189,
          "testName": "Startup_SeedsCustomAdminKey_WhenConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 241,
          "testName": "Startup_SeedsCustomAdminKey_WhenMcgAdminKeyConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 292,
          "testName": "Startup_UpdatesAdminKeyHash_WhenEnvironmentKeyChanges",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-PERSONAL-APPKEY-CREATE",
      "category": "AUTH",
      "type": "Negative",
      "description": "Non-admin users can create personal App Keys up to quota",
      "proofCount": 9,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 191,
          "testName": "CreateAppKey_NonAdmin_CreatesPersonalKey_UpToDefaultQuota",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 421,
          "testName": "creates category-scoped key, captures one-time plaintext key, and refreshes",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 19,
          "testName": "renders nothing when isCreateModalOpen is false",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 61,
          "testName": "locks key type to personal key for non-admin and shows quota feedback",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 115,
          "testName": "handles scope serialization for server scope and target username for admin",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 154,
          "testName": "handles scope serialization for category scope and expiration days",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 192,
          "testName": "disables submit button when quota limit is reached",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 217,
          "testName": "displays one-time secret result and copies plaintext key to clipboard",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/personal-appkeys-and-quotas.spec.ts",
          "lineNumber": 33,
          "testName": "Non-Admin Context: mints personal key, views snippet, and revokes key",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-PERSONAL-APPKEY-LIST",
      "category": "AUTH",
      "type": "Positive",
      "description": "Non-admin users can view their personal App Keys",
      "proofCount": 6,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 125,
          "testName": "GetAppKeys_NonAdmin_ReturnsOnlyPersonalKeys_ForCurrentUser",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 351,
          "testName": "loads app keys and updates store",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/App.test.tsx",
          "lineNumber": 81,
          "testName": "renders role-adaptive UI for non-admin user",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeysCard.test.tsx",
          "lineNumber": 34,
          "testName": "renders role-adapted My App Keys view for non-admin user",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeysCard.test.tsx",
          "lineNumber": 79,
          "testName": "renders keys list, copies config snippet, and revokes key",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/personal-appkeys-and-quotas.spec.ts",
          "lineNumber": 5,
          "testName": "Non-Admin Context: displays My App Keys navigation and personal quota indicator",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-PERSONAL-APPKEY-QUOTA-OVERRIDE",
      "category": "AUTH",
      "type": "Positive",
      "description": "Custom user quotas override default limit",
      "proofCount": 6,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 223,
          "testName": "CreateAppKey_CustomQuotaOverride_AllowsHigherLimit",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 594,
          "testName": "sets user quota override and refreshes quota list",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTab.test.tsx",
          "lineNumber": 6,
          "testName": "renders GeneralTab with security default quota inputs and triggers save",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTab.test.tsx",
          "lineNumber": 71,
          "testName": "updates form state when settings prop changes",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeysCard.test.tsx",
          "lineNumber": 222,
          "testName": "manages custom user quotas in admin quotas tab",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/personal-appkeys-and-quotas.spec.ts",
          "lineNumber": 135,
          "testName": "Admin Context: configures custom user quota override",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-PREFIX-EXTRACTION",
      "category": "AUTH",
      "type": "Positive",
      "description": "ExtractKeyPrefix parses semantic prefixes, Base62 selectors, and legacy tokens accurately.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 451,
          "testName": "ExtractKeyPrefix_ExtractsSemanticAndLegacyPrefixesAccurately",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-QUERY-TOKEN-EXTRACTION",
      "category": "AUTH",
      "type": "Positive",
      "description": "Query string token middleware extracts access_token or token query parameter to Authorization header.",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EndpointAuthorizationTests.cs",
          "lineNumber": 7,
          "testName": "QueryStringTokenMiddleware_Extracts_AccessToken_To_AuthorizationHeader",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EndpointAuthorizationTests.cs",
          "lineNumber": 45,
          "testName": "QueryStringTokenMiddleware_Extracts_Token_To_AuthorizationHeader",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-STANDALONE-ADMINPOLICY-LOOPBACK-ALLOW",
      "category": "AUTH",
      "type": "Positive",
      "description": "AdminPolicy succeeds in standalone mode for unauthenticated loopback requests.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 176,
          "testName": "AdminPolicy_StandaloneMode_LoopbackIp_PassesAdminPolicy",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-STANDALONE-CUSTOM-CIDR-ALLOW",
      "category": "AUTH",
      "type": "Positive",
      "description": "Standalone mode grants admin access to client IPs matching Admin:StandaloneAllowedNetworks CIDR ranges.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 35,
          "testName": "IsAdmin_StandaloneMode_CustomCidr_ReturnsTrue",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-STANDALONE-LOOPBACK-ALLOW",
      "category": "AUTH",
      "type": "Positive",
      "description": "Standalone mode without external IDP grants admin access to loopback IP addresses.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 14,
          "testName": "IsAdmin_StandaloneMode_LoopbackIp_ReturnsTrue",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-SYSTEM-APPKEY-SEPARATION",
      "category": "AUTH",
      "type": "Positive",
      "description": "System keys are distinct and require admin permissions",
      "proofCount": 10,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 151,
          "testName": "SystemAppKeys_RequireAdmin_AndSeparateFromPersonalKeys",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 311,
          "testName": "PersonalAppKey_WithAllScope_DoesNotGrantAdministratorRole",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 364,
          "testName": "SystemAppKey_WithAdminScope_GrantsAdministratorRole",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 335,
          "testName": "switches keyTypeTab between personal and system",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 369,
          "testName": "fetches system-filtered app keys via query parameters",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/App.test.tsx",
          "lineNumber": 15,
          "testName": "renders header, navigation tabs, and default overview dashboard for admin user",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/App.test.tsx",
          "lineNumber": 36,
          "testName": "switches between tabs on navigation click",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeyModal.test.tsx",
          "lineNumber": 31,
          "testName": "allows admin to select key type and create system app key",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/AppKeysCard.test.tsx",
          "lineNumber": 166,
          "testName": "handles admin tab switching and username filtering",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/personal-appkeys-and-quotas.spec.ts",
          "lineNumber": 87,
          "testName": "Admin Context: manages segmented App-Level Keys and User Personal Keys",
          "details": null
        }
      ]
    },
    {
      "id": "UI-100",
      "category": "AUTH",
      "type": "Positive",
      "description": "initializes with empty providers",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 1,
          "testName": "initializes with empty providers",
          "details": null
        }
      ]
    },
    {
      "id": "UI-101",
      "category": "AUTH",
      "type": "Positive",
      "description": "should initialize with default values",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useUserStore.test.ts",
          "lineNumber": 1,
          "testName": "should initialize with default values",
          "details": null
        }
      ]
    },
    {
      "id": "UI-114",
      "category": "AUTH",
      "type": "Positive",
      "description": "renders nothing when isPolicyModalOpen is false",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PolicyModal.test.tsx",
          "lineNumber": 1,
          "testName": "renders nothing when isPolicyModalOpen is false",
          "details": null
        }
      ]
    },
    {
      "id": "UI-120",
      "category": "AUTH",
      "type": "Positive",
      "description": "RBAC and SID mapping administration UI allows configuring role policies and SID associations",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/rbac-enforcement-flow.spec.ts",
          "lineNumber": 1,
          "testName": "should create, verify, and delete RBAC policy and SID mapping",
          "details": null
        }
      ]
    },
    {
      "id": "UI-123",
      "category": "AUTH",
      "type": "Positive",
      "description": "should open App Keys \u0026 Security view and display client setup controls",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/client-setup-and-appkeys.spec.ts",
          "lineNumber": 1,
          "testName": "should open App Keys \u0026 Security view and display client setup controls",
          "details": null
        }
      ]
    },
    {
      "id": "UI-125",
      "category": "AUTH",
      "type": "Positive",
      "description": "Admin role renders full administrative dashboard and server management controls",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/multi-user-matrix.spec.ts",
          "lineNumber": 1,
          "testName": "Admin Context: renders full administrator view and privileged controls",
          "details": null
        }
      ]
    },
    {
      "id": "UI-127",
      "category": "AUTH",
      "type": "Positive",
      "description": "should navigate to settings permissions tab and open policy configuration modal",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/rbac-and-permissions.spec.ts",
          "lineNumber": 1,
          "testName": "should navigate to settings permissions tab and open policy configuration modal",
          "details": null
        }
      ]
    },
    {
      "id": "UI-129",
      "category": "AUTH",
      "type": "Positive",
      "description": "should create client application and generate AppKey with scope constraints",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/appkey-and-client-lifecycle.spec.ts",
          "lineNumber": 1,
          "testName": "should create client application and generate AppKey with scope constraints",
          "details": null
        }
      ]
    },
    {
      "id": "CORE-101",
      "category": "CORE",
      "type": "Positive",
      "description": "Auto-added requirement tracking",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SessionManagerTests.cs",
          "lineNumber": 9,
          "testName": "PerformanceMetrics_And_TotalRequests_IncrementCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SessionManagerTests.cs",
          "lineNumber": 33,
          "testName": "UpdateBackendStatus_TracksBackendHealth",
          "details": null
        }
      ]
    },
    {
      "id": "DB-01",
      "category": "DB",
      "type": "Positive",
      "description": "SQLite auto-migration seamlessly upgrades legacy schema, encrypts plaintext secrets, and preserves data",
      "proofCount": 17,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 29,
          "testName": "Sqlite_UpgradeMigration_FromLegacySchema_PreservesDataAndPassesValidation",
          "details": "Verifies that SQLite upgrade migration from legacy schema preserves data, encrypts configs, and passes schema validation."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MultiDatabaseProviderIntegrationTests.cs",
          "lineNumber": 9,
          "testName": "DbConnectionFactory_Instantiates_SupportedProviders",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MultiDatabaseProviderIntegrationTests.cs",
          "lineNumber": 42,
          "testName": "JsonListTypeHandler_SerializesAndDeserializes_StringLists",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs",
          "lineNumber": 85,
          "testName": "UserQuotaRepository_SetAndGet_ReturnsPersistedQuota",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs",
          "lineNumber": 98,
          "testName": "UserQuotaRepository_GetAll_ReturnsAllUserQuotas",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs",
          "lineNumber": 117,
          "testName": "UserQuotaRepository_Update_UpdatesExistingQuota",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs",
          "lineNumber": 132,
          "testName": "UserQuotaRepository_Delete_RemovesQuota",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UserQuotaAndAppKeyRepositoryTests.cs",
          "lineNumber": 199,
          "testName": "DependencyInjection_RegistersIUserQuotaRepository",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbConnectionFactoryTests.cs",
          "lineNumber": 10,
          "testName": "Factory_Creates_Sqlite_Connection_By_Default",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbConnectionFactoryTests.cs",
          "lineNumber": 28,
          "testName": "Factory_Creates_MySql_Connection_When_Configured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbConnectionFactoryTests.cs",
          "lineNumber": 46,
          "testName": "Factory_Creates_MsSql_Connection_When_Configured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SeederAndDiscoveryTests.cs",
          "lineNumber": 53,
          "testName": "DatabaseSeeder_SeedsDefaultData_Successfully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 80,
          "testName": "SavePolicy_SavesSuccessfully_OnSqlite",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 91,
          "testName": "SavePolicy_SavesSuccessfully_OnMySql",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 182,
          "testName": "SaveMapping_SavesSuccessfully_OnSqlite",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MinimalApiEndpointsTests.cs",
          "lineNumber": 42,
          "testName": "GetServers_Returns_Server_List",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 30,
          "testName": "Seeder_Initializes_Default_Settings_And_Providers",
          "details": null
        }
      ]
    },
    {
      "id": "DB-02",
      "category": "DB",
      "type": "Positive",
      "description": "MSSQL stored procedure scripts declare all required procedures and parameter contracts correctly",
      "proofCount": 4,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 311,
          "testName": "Mssql_Scripts_DeclareAllProceduresAndExpectedParameters",
          "details": "Verifies that MSSQL stored procedure scripts declare all required procedures and parameter contracts correctly."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 369,
          "testName": "MySql_Scripts_DeclareAllProceduresWithP_PrefixParameters",
          "details": "Verifies that MySQL stored procedure scripts declare all required procedures with p_ parameter conventions."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 708,
          "testName": "Repositories_MySQL_AppKeyOperations_UseP_PrefixParameters",
          "details": "Verifies that Dapper repository mappings for MySQL correctly bind stored procedure p_ parameters."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MySqlLiveIntegrationTests.cs",
          "lineNumber": 25,
          "testName": "MySql_LiveRepository_AppKeyAndSecretProviderLifecycle_Succeeds",
          "details": null
        }
      ]
    },
    {
      "id": "DB-07",
      "category": "DB",
      "type": "Positive",
      "description": "SQLite upgrade migration automatically provisions OAuthClients table on legacy database",
      "proofCount": 10,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 433,
          "testName": "Sqlite_UpgradeMigration_ProvisionsOAuthClientsTable",
          "details": "Verifies that SQLite upgrade migration creates OAuthClients table when upgrading an existing legacy database."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 543,
          "testName": "Mssql_Migration004_DeclaresOAuthClientsTableAndProcedures",
          "details": "Verifies that MSSQL migration 004 declares OAuthClients table and procedures."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 565,
          "testName": "MySql_Migration004_DeclaresOAuthClientsTableAndProcedures",
          "details": "Verifies that MySQL migration 004 declares OAuthClients table and procedures."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 71,
          "testName": "SaveAndGetOAuthClientById_Success",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 108,
          "testName": "SaveOAuthClient_UpdateExisting_Success",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 150,
          "testName": "GetOAuthClients_ReturnsAllClientsOrderedByCreatedAt",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 177,
          "testName": "DeleteOAuthClient_ExistingClient_ReturnsTrueAndRemovesClient",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 198,
          "testName": "DeleteOAuthClient_NonExistentClient_ReturnsFalse",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OAuthClientRepositoryTests.cs",
          "lineNumber": 206,
          "testName": "GetOAuthClientById_NonExistentClient_ReturnsNull",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 335,
          "testName": "Seeder_Initializes_OAuthClients_Table",
          "details": null
        }
      ]
    },
    {
      "id": "DOC-SETUP-SKILL-FRONTMATTER",
      "category": "DOC",
      "type": "Positive",
      "description": "mcg-setup skill frontmatter is valid YAML, specifies name, description starting with \u0027Use when...\u0027, and length is under 1024 characters",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SetupSkillTests.cs",
          "lineNumber": 18,
          "testName": "Skill_Frontmatter_IsValidAndWithinCharacterLimit",
          "details": null
        }
      ]
    },
    {
      "id": "DOC-SETUP-SKILL-MIRROR",
      "category": "DOC",
      "type": "Positive",
      "description": "The mcg-setup skill and templates are mirrored 1:1 in .agents/skills/mcg-setup/",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SetupSkillTests.cs",
          "lineNumber": 152,
          "testName": "Skill_MirroredInAgentsDirectory",
          "details": null
        }
      ]
    },
    {
      "id": "DOC-SETUP-SKILL-TEMPLATES",
      "category": "DOC",
      "type": "Positive",
      "description": "All scaffold templates exist, are non-empty, and contain required directives such as responseBufferLimit, MCG_MASTER_KEY, and ghcr.io/spelech/model-context-gateway",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SetupSkillTests.cs",
          "lineNumber": 98,
          "testName": "Templates_AreValidAndContainRequiredDirectives",
          "details": null
        }
      ]
    },
    {
      "id": "DOC-SETUP-SKILL-WORKFLOW",
      "category": "DOC",
      "type": "Positive",
      "description": "mcg-setup skill contains all 6 required setup phases including environment probing, hosting platforms, env vs UI trade-offs, identity/network topology, artifact generation, and health/client configuration",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SetupSkillTests.cs",
          "lineNumber": 44,
          "testName": "Skill_ContainsAllRequiredPhasesAndComparisons",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-EXTERNAL-IDP-DENIES-ANONYMOUS-LOOPBACK",
      "category": "GUARD",
      "type": "Negative",
      "description": "When an external IDP is configured, anonymous loopback requests do not bypass authentication.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 224,
          "testName": "AdminPolicy_ExternalIdpConfigured_LoopbackIp_RequiresCredentials",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-STANDALONE-ADMINPOLICY-EXTERNAL-DENY",
      "category": "GUARD",
      "type": "Negative",
      "description": "AdminPolicy rejects unauthenticated requests from non-whitelisted external IPs in standalone mode.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 200,
          "testName": "AdminPolicy_StandaloneMode_ExternalUntrustedIp_FailsAdminPolicy",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-STANDALONE-EXTERNAL-DENY",
      "category": "GUARD",
      "type": "Negative",
      "description": "Standalone mode denies admin access to non-whitelisted external IPs without an Admin AppKey.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StandaloneAdminAuthTests.cs",
          "lineNumber": 57,
          "testName": "IsAdmin_StandaloneMode_UntrustedIp_ReturnsFalse",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-01",
      "category": "GUARD",
      "type": "Negative",
      "description": "ResourceRoutingManager throws KeyNotFoundException when reading an unregistered resource URI.",
      "proofCount": 43,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ResourceRoutingManagerTests.cs",
          "lineNumber": 67,
          "testName": "ReadResourceAsync_ThrowsKeyNotFound_WhenResourceNotRegistered",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 468,
          "testName": "Pairwise_NullOrEmptyTarget_FailsClosed_ReturnsFalse",
          "details": "Ensures null or whitespace capability targets fail closed immediately."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 490,
          "testName": "Pairwise_CorruptedAppKeyScopesJson_FailsClosed_ReturnsFalse",
          "details": "Ensures corrupted AppKey scopes JSON fails closed safely and rejects execution."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 585,
          "testName": "JsonRpcStateManager_Disconnect_PreventsRegistrationAndCancelsPending",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 312,
          "testName": "CreateAppKey_ReturnsBadRequest_WhenNameMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 324,
          "testName": "CreateAppKey_EnforcesUserLimit_ForNonAdmin",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 369,
          "testName": "RevokeAppKey_ReturnsNotFound_WhenIdDoesNotExist",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 378,
          "testName": "RevokeAppKey_ReturnsForbid_WhenUserNotOwnerOrAdmin",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 433,
          "testName": "QuotaEndpoints_Validation_ReturnsBadRequest_OnInvalidInputs",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 90,
          "testName": "SaveSecretProvider_ReturnsBadRequest_WhenProviderNameMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 172,
          "testName": "SaveAuthProvider_ReturnsBadRequest_WhenProviderNameMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 220,
          "testName": "AppKeysController_CreateAppKey_UnknownCategory_NonAdmin_FailsWithBadRequest",
          "details": "Ensures non-admin callers cannot create AppKeys with unconfigured categories."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 239,
          "testName": "AppKeysController_CreateAppKey_EmptyCategory_FailsWithBadRequest",
          "details": "Ensures AppKey creation with empty or whitespace category fails closed with BadRequest."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 304,
          "testName": "ClientsController_CreateClient_EmptyCategory_ReturnsBadRequest",
          "details": "Ensures client creation with empty category scope fails closed with BadRequest."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 84,
          "testName": "RBAC_DefaultsToDenied_WhenNoPoliciesConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 106,
          "testName": "RBAC_RejectsUser_WhenPolicyRequiresDifferentGroup",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 118,
          "testName": "RBAC_RejectsUser_OnExplicitDeny",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 130,
          "testName": "CallToolAsync_ReturnsError_WhenUnauthorized",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 145,
          "testName": "GetPromptAsync_ThrowsUnauthorized_WhenUnauthorized",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 159,
          "testName": "ReadResourceAsync_ThrowsUnauthorized_WhenUnauthorized",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/GroupMappingsAndSpecAuthTests.cs",
          "lineNumber": 125,
          "testName": "GroupMapping_RejectsUser_WhenNoMappingExistsForRestrictedTarget",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 176,
          "testName": "NonAdmin_DefaultsToDeny_WhenNoMatchingPoliciesConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 197,
          "testName": "IsUserAuthorizedAsync_FailsClosed_OnNullOrWhitespaceTarget",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 234,
          "testName": "ExplicitDeny_OverridesGroupAllow",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 579,
          "testName": "CompleteAsync_ForPrompt_ThrowsUnauthorized_WhenCallerDenied",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 611,
          "testName": "CompleteAsync_ForResourceTemplate_ThrowsUnauthorized_WhenCallerDenied",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 643,
          "testName": "CompleteAsync_FailsClosed_OnUnknownOrUnresolvedTargets",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 93,
          "testName": "CallToolAsync_ExecuteTool_ReturnsError_WhenNameMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 120,
          "testName": "CallToolAsync_ReturnsCancellationError_WhenCancelled",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 149,
          "testName": "CallToolAsync_ThrowsKeyNotFound_WhenToolNotInRoutingTable",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 606,
          "testName": "AuthMiddleware_Blocks_Unauthorized_Request",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecurityValidationHelperTests.cs",
          "lineNumber": 44,
          "testName": "ValidateToolOrPromptName_ValidatesNames",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 270,
          "testName": "CreateClient_ReturnsBadRequest_WhenDisplayNameMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 283,
          "testName": "CreateClient_ReturnsBadRequest_WhenCategoryScopeEmpty",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 300,
          "testName": "CreateClient_Returns500_WhenOAuthClientRepositoryThrows",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 317,
          "testName": "DeleteClient_Returns500_WhenOAuthClientRepositoryThrows",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 352,
          "testName": "CleanupClients_Returns500_WhenOAuthClientRepositoryThrows",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 58,
          "testName": "SavePolicy_ReturnsBadRequest_WhenTargetIdMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 69,
          "testName": "SavePolicy_ReturnsBadRequest_WhenRequiredGroupMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 160,
          "testName": "SaveMapping_ReturnsBadRequest_WhenExternalIdMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 171,
          "testName": "SaveMapping_ReturnsBadRequest_WhenInternalGroupMissing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 86,
          "testName": "handles policy save failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PolicyModal.test.tsx",
          "lineNumber": 60,
          "testName": "submits form with constructed payload for DENY policy",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-02",
      "category": "GUARD",
      "type": "Negative",
      "description": "SSE transport fails closed with SecurityException when secret provider resolution fails",
      "proofCount": 15,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SseTransportTests.cs",
          "lineNumber": 32,
          "testName": "ResolveTokenAsync_ThrowsSecurityException_WhenSecretProviderFails",
          "details": "Ensures SSE transport fails closed with SecurityException when secret retriever fails."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SseTransportTests.cs",
          "lineNumber": 53,
          "testName": "ResolveTokenAsync_ThrowsInvalidOperationException_WhenNoRetrieverRegistered",
          "details": "Ensures SSE transport fails closed when no secret retriever is registered."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs",
          "lineNumber": 37,
          "testName": "ResolveUserSidsAsync_ThrowsInvalidOperation_WhenDbConfigSpecifiesPlaintextLdap",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceIntegrationTests.cs",
          "lineNumber": 78,
          "testName": "ResolveUserSidsAsync_FailsClosedWithSecurityException_OnUnreachableServer",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 283,
          "testName": "ResolveDbEncryptionKey_ThrowsInvalidOperationException_WhenVaultFails",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 218,
          "testName": "HttpTransport_SendRequestAsync_Throws_When_Impersonation_Missing_WindowsIdentity",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 188,
          "testName": "LdapService_ThrowsInvalidOperation_WhenUseSslFalse",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 208,
          "testName": "LdapService_ThrowsSecurityException_OnBindFailure",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 394,
          "testName": "StdioTransport_ShouldFailClosed_WhenSecretResolutionFails",
          "details": "Ensures STDIO transport fails closed without spawning subprocess if secret resolution fails."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/HttpTransportTests.cs",
          "lineNumber": 31,
          "testName": "ResolveTokenAsync_ThrowsSecurityException_WhenSecretProviderFails",
          "details": "Ensures HTTP transport fails closed with SecurityException when secret retriever fails."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/HttpTransportTests.cs",
          "lineNumber": 54,
          "testName": "ResolveTokenAsync_ThrowsInvalidOperationException_WhenNoRetrieverRegistered",
          "details": "Ensures HTTP transport fails closed when no secret retriever is registered."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 10,
          "testName": "EscapeLdapFilter_EscapesSpecialCharacters",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/LdapActiveDirectoryServiceTests.cs",
          "lineNumber": 64,
          "testName": "ResolveUserSidsAsync_ThrowsInvalidOperation_WhenPlaintextLdapConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs",
          "lineNumber": 61,
          "testName": "EnsureVaultClientAsync_ReturnsNull_WhenVaultProviderDisabledInRepo",
          "details": "Ensures Vault client returns null when Vault provider is disabled in repository."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs",
          "lineNumber": 113,
          "testName": "GetSecretAsync_ThrowsSecurityException_OnVaultException",
          "details": "Ensures Vault secret retrieval failures throw SecurityException and fail closed."
        }
      ]
    },
    {
      "id": "GUARD-03",
      "category": "GUARD",
      "type": "Negative",
      "description": "CompositeSecretRetriever throws InvalidOperationException when an unregistered secret provider is requested.",
      "proofCount": 13,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs",
          "lineNumber": 17,
          "testName": "GetSecretForProviderAsync_ThrowsInvalidOperationException_WhenProviderNotRegistered",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 19,
          "testName": "EnsureVaultClientAsync_ThrowsArgumentException_WhenAddressInvalidScheme",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 104,
          "testName": "GetSecretAsync_UsesCustomVaultClientFactory",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 184,
          "testName": "SseTransport_ResolveTokenAsync_FailsClosed_WhenVaultResolvesNull",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs",
          "lineNumber": 66,
          "testName": "GetSecretAsync_HandlesExceptionGracefully_ReturnsNull",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 104,
          "testName": "StdioTransport_ShouldThrowSecurityExceptionForUnsafeExecutable",
          "details": "Ensures STDIO transport rejects commands with shell metacharacters or dangerous commands."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 126,
          "testName": "StdioTransport_ShouldThrowSecurityExceptionForShellExecutable",
          "details": "Ensures STDIO transport rejects shell wrappers and script interpreters lacking explicit safe paths."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 148,
          "testName": "StdioTransport_ShouldThrowOnInvalidExecutable",
          "details": "Ensures STDIO transport fails cleanly with InvalidOperationException when target binary is not found."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 210,
          "testName": "StdioTransport_ShouldTimeoutOnSlowRequests",
          "details": "Ensures STDIO transport times out requests exceeding configured execution duration limits."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 289,
          "testName": "StdioTransport_ShouldHandleUnexpectedExit",
          "details": "Ensures STDIO transport clears pending requests and fails closed upon unexpected child process termination."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs",
          "lineNumber": 94,
          "testName": "GetSecretAsync_ThrowsInvalidOperationException_WhenTokenEndpointMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs",
          "lineNumber": 102,
          "testName": "GetSecretAsync_ThrowsSecurityException_WhenHttpResponseIsNotSuccess",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/multi-user-matrix.spec.ts",
          "lineNumber": 55,
          "testName": "Guest / Denied Context: restricted user session renders safely",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-04",
      "category": "GUARD",
      "type": "Negative",
      "description": "Malformed completion payloads or unmapped backends must fail closed safely",
      "proofCount": 24,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 508,
          "testName": "Pairwise_CompleteAsync_MalformedOrMissingBackends_ThrowsOrFailsClosed",
          "details": "Ensures malformed completion payloads or unmapped backends throw or fail closed."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 531,
          "testName": "Pairwise_DatabaseDisconnection_FailsClosedSafely",
          "details": "Ensures database disconnection or failure fails closed safely without leaking access."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 163,
          "testName": "SchemaValidation_FailsClosed_WhenRequiredColumnOrTableMissing",
          "details": "Ensures database schema validation fails closed when required columns or tables are missing."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 189,
          "testName": "SchemaValidation_FailsClosed_WhenUserQuotasOrKeyTypeMissing",
          "details": "Ensures database schema validation fails closed when KeyType column or UserQuotas table is missing."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSchemaUpgradeAndContractTests.cs",
          "lineNumber": 587,
          "testName": "SchemaValidation_FailsClosed_WhenOAuthClientsTableMissing",
          "details": "Ensures database schema validation fails closed when OAuthClients table is missing."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MultiDatabaseProviderIntegrationTests.cs",
          "lineNumber": 29,
          "testName": "DbConnectionFactory_Throws_OnUnsupportedProvider",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 449,
          "testName": "Controllers_HandleDbFailures_Returning500",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 64,
          "testName": "GetAllProviders_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 140,
          "testName": "SaveSecretProvider_Returns500_WhenRepositoryThrows",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 206,
          "testName": "SaveAuthProvider_Returns500_WhenRepositoryThrows",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 227,
          "testName": "GetSecretProviders_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 242,
          "testName": "GetAuthProviders_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 216,
          "testName": "AuditLogger_ThrowsException_OnDatabaseError",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 240,
          "testName": "CallTool_FailsClosed_WhenAuditLogFails",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 279,
          "testName": "CallTool_FailsClosed_WhenAuditLoggerUnresolved",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditLoggerTests.cs",
          "lineNumber": 91,
          "testName": "LogInvocationAsync_ThrowsInvalidOperationException_OnConnectionFailure",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditLoggerTests.cs",
          "lineNumber": 104,
          "testName": "LogAdminActionAsync_ThrowsInvalidOperationException_OnConnectionFailure",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/FineGrainedRbacTests.cs",
          "lineNumber": 173,
          "testName": "RBAC_DefaultsToDenied_WhenDbExceptionThrown",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 104,
          "testName": "AuditLogger_AuditFailClosed_RefusesInvocation_OnAuditWriteError",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 124,
          "testName": "DeletePolicy_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 147,
          "testName": "GetMappings_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 193,
          "testName": "SaveMapping_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 217,
          "testName": "DeleteMapping_Returns500_OnDbException",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 230,
          "testName": "GetPolicies_Returns500_OnDbException",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-05",
      "category": "GUARD",
      "type": "Negative",
      "description": "Socket-level SSRF protection blocks private and loopback IP connections unless explicitly allowlisted.",
      "proofCount": 16,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 712,
          "testName": "Connect_BlocksPrivateOrLoopbackIPs_AtSocketLevel",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 744,
          "testName": "SecurityValidationHelper_IsBlockedIp_ValidatesAllBlockedAndAllowedRanges",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 84,
          "testName": "PrivateOrLoopback_Blocked_When_AllowPrivateIps_False",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 256,
          "testName": "FailClosedValidation_RejectsInvalidJson_AndInsecureUrls",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 103,
          "testName": "SaveSecretProvider_ReturnsBadRequest_WhenHttpUrlPassedInConfig",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 330,
          "testName": "SaveAuthProvidersBatch_ReturnsBadRequest_WhenAllProvidersDisabled",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 397,
          "testName": "SaveSecretProvider_HttpUrl_RejectedForExternal",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ServerEndpointsValidationTests.cs",
          "lineNumber": 28,
          "testName": "IsValidServerUrl_Rejects_Invalid_Http_Urls",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ServerEndpointsValidationTests.cs",
          "lineNumber": 53,
          "testName": "Validation_Rejects_TypeOnly_Update_Leaving_Incompatible_Url",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 232,
          "testName": "ProbeServerAsync_Sets_Failed_For_Invalid_Stdio_Server_Command",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs",
          "lineNumber": 58,
          "testName": "DockerDiscovery_SkipsContainer_ResolvingToPrivateIp",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EmbeddingServiceTests.cs",
          "lineNumber": 83,
          "testName": "ApiEmbeddingService_GetEmbeddingAsync_Throws_On_Http_Error",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 73,
          "testName": "McpClient_NamedHttpClient_Applies_SsrfConnectCallback_AndBlocksPrivateIps",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 1069,
          "testName": "CustomFilesSanitization_PreventsDirectoryTraversal",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecurityValidationHelperTests.cs",
          "lineNumber": 7,
          "testName": "IsBlockedIp_ValidatesSpecialIpRanges",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecurityValidationHelperTests.cs",
          "lineNumber": 31,
          "testName": "IsInSubnet_HandlesSpecialCases",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-06",
      "category": "GUARD",
      "type": "Negative",
      "description": "Auth middleware enforces case-insensitive route matching preventing path bypass.",
      "proofCount": 13,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 216,
          "testName": "AuthMiddleware_CaseInsensitivity_Bypass_Check",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 52,
          "testName": "HeaderAuth_StripsHeaders_ForUntrustedProxy",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 330,
          "testName": "TrustedProxyHelper_DeniesLoopback_WhenNotExplicitlyAllowlisted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 349,
          "testName": "TrustedProxyHelper_DeniesXForwardedFor_WhenChainHasUntrustedHop",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 390,
          "testName": "TrustedProxyHelper_Unconfigured_LoopbackTrusted_LANNotTrusted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 412,
          "testName": "TrustedProxyHelper_ConfiguredProxyTrusted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 458,
          "testName": "TrustedProxyHelper_ForgedHeaderFromLanHost_DegradesToGuest",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CorsTests.cs",
          "lineNumber": 20,
          "testName": "Cors_DefaultFallback_Allows_LocalhostOrigins",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CorsTests.cs",
          "lineNumber": 50,
          "testName": "Cors_DefaultFallback_Denies_In_Production",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CorsTests.cs",
          "lineNumber": 92,
          "testName": "Cors_WithConfiguredOrigins_RestrictsToConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CorsTests.cs",
          "lineNumber": 121,
          "testName": "Cors_WithAllowedOriginsKeyFallback_RestrictsToConfigured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PermissionsControllerTests.cs",
          "lineNumber": 243,
          "testName": "SavePolicy_ReturnsBadRequest_WhenWildcardDenyPolicy",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OpenIddictProductionTests.cs",
          "lineNumber": 12,
          "testName": "Production_WithNoCert_Throws_InvalidOperationException",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-ADMIN-CUSTOM-FILES-VALIDATION",
      "category": "GUARD",
      "type": "Negative",
      "description": "manage_custom_files rejects invalid prompt JSON syntax and unsupported file categories.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 779,
          "testName": "ManageCustomFiles_ValidationGuardrails",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-ADMIN-ENDPOINT-UNAUTHORIZED",
      "category": "GUARD",
      "type": "Negative",
      "description": "Unauthenticated / non-admin client request to /admin receives 403 Forbidden.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 193,
          "testName": "AdminEndpoint_UnauthorizedCaller_Returns403",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-ADMIN-POLICIES-WILDCARD-DENY",
      "category": "GUARD",
      "type": "Negative",
      "description": "manage_policies rejects wildcard deny policies to prevent global lockout.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 513,
          "testName": "ManagePolicies_WildcardDenyGuardrail",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-ADMIN-PROVIDERS-LDAP-PLAINTEXT",
      "category": "GUARD",
      "type": "Negative",
      "description": "manage_providers rejects unencrypted LDAP connections on port 389.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 650,
          "testName": "ManageProviders_LdapPlaintextGuardrail",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-ADMIN-SERVERS-VALIDATION",
      "category": "GUARD",
      "type": "Negative",
      "description": "Verifies that the manage_servers tool accurately enforces validation by rejecting malformed transport types, missing required parameters, and requests for non-existent servers.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 324,
          "testName": "ManageServers_ValidationGuardrails",
          "details": null
        }
      ]
    },
    {
      "id": "GUARD-ADMIN-UNKNOWN-TOOL",
      "category": "GUARD",
      "type": "Negative",
      "description": "AdminMcpServer returns an error response for unknown tool or action invocations.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 592,
          "testName": "CallToolAsync_UnknownToolOrAction_ReturnsErrorResponse",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-TEST-CALL-ERROR",
      "category": "GUARD",
      "type": "Negative",
      "description": "AdminMcpServer test_tool_call propagates downstream backend errors with visibility.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 633,
          "testName": "CallToolAsync_TestToolCall_MissingServer_ReturnsError",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-01",
      "category": "MCP",
      "type": "Positive",
      "description": "RewriteRequestJson accurately parses JSON batches, comments, and trailing commas using System.Text.Json JsonNode.",
      "proofCount": 60,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 191,
          "testName": "JsonNode_Rewrite_HandlesBatchCommentsAndCommas",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 336,
          "testName": "SendRequestAsync_Succeeds_When_Response_Has_Method_Property",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 572,
          "testName": "JsonNode_Rewrite_HandlesAdversarialEdgeCases",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 684,
          "testName": "PlainJsonRpcMessages_DoNotCauseStackOverflow_PolymorphicVariants",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 567,
          "testName": "Pairwise_MetaMode_ExecuteTool_EnforcesTargetAuthorization",
          "details": "Verifies that router meta-mode execute_tool strictly enforces target tool authorization policies."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolErrorFormatterTests.cs",
          "lineNumber": 7,
          "testName": "TransformError_FormatsJsonRpcErrorWithRemediation",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolErrorFormatterTests.cs",
          "lineNumber": 27,
          "testName": "TransformException_FormatsExceptionWithRemediation",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolErrorFormatterTests.cs",
          "lineNumber": 42,
          "testName": "GetActionableSuggestion_ReturnsExpectedCategory",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientSessionTests.cs",
          "lineNumber": 59,
          "testName": "ClientSession_InitializationAndLifecycle_ExecutesSuccessfully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CategoryScopedAppKeysTests.cs",
          "lineNumber": 428,
          "testName": "ClientSession_ExecuteTool_EnforcesCategoryScopeOnInnerTarget",
          "details": "Verifies that router meta-mode execute_tool validates and enforces category scopes on target tool calls."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 85,
          "testName": "Pipeline_POST_Sse_JSONRPC_Full_Protocol_Suite",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 142,
          "testName": "Pipeline_POST_Message_FullProtocolSession_Suite",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 276,
          "testName": "Pipeline_Server_CRUD_Endpoints",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 330,
          "testName": "Pipeline_GET_Version_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 339,
          "testName": "Pipeline_GET_Servers_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 429,
          "testName": "Pipeline_GET_Stats_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 438,
          "testName": "Pipeline_GET_Health_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 57,
          "testName": "ProbeServerAsync_Sets_Connected_When_Endpoint_Responds_200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 97,
          "testName": "ProbeServerAsync_Sets_Failed_When_Endpoint_Throws_Exception",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 132,
          "testName": "ProbeServerAsync_Sets_Disabled_When_Server_Not_Enabled",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 161,
          "testName": "ProbeAllServersAsync_Probes_All_Enabled_Servers",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 190,
          "testName": "ProbeServerAsync_Sets_Connected_For_Valid_Stdio_Server_Without_Http_Probe",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/BackendHealthCheckServiceTests.cs",
          "lineNumber": 264,
          "testName": "ProbeServerAsync_Sets_Connected_For_Custom_Server",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 274,
          "testName": "PolymorphicDeserialization_Correctly_Deserializes_JsonRpcMessage_Subclasses",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 302,
          "testName": "Deserializing_Plain_JsonRpcMessage_Does_Not_Cause_StackOverflow",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 318,
          "testName": "Serializing_Plain_JsonRpcMessage_Does_Not_Cause_StackOverflow",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 332,
          "testName": "TestInitializationDiagnostics",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 895,
          "testName": "ErrorTransformation_Cancellation_And_Sampling_Works_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 1084,
          "testName": "CustomFilesDirectoryHelper_CreatesDirectoriesCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 1099,
          "testName": "SessionManager_PerServerCache_WorksCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MinimalApiEndpointsTests.cs",
          "lineNumber": 55,
          "testName": "Post_Put_Delete_Server_Lifecycle_Works",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 24,
          "testName": "initializes with default state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 46,
          "testName": "successfully loads servers and updates state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 65,
          "testName": "triggers batch reconnect when refreshAll is true",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 85,
          "testName": "handles server fetch errors gracefully and shows error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 105,
          "testName": "creates a new server via POST when no id is present",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 142,
          "testName": "updates an existing server via PUT when id is present",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 176,
          "testName": "shows error toast when save fails",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 194,
          "testName": "sends PUT request to update server enabled state and refreshes",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 216,
          "testName": "handles toggle failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 232,
          "testName": "sends reconnect POST request and shows info toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 252,
          "testName": "handles reconnect failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 325,
          "testName": "updates search query and resets page to 1",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 338,
          "testName": "updates sortBy and groupBy",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 352,
          "testName": "updates page and pageSize",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 367,
          "testName": "toggles group collapse state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 381,
          "testName": "manages modal open/close actions",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 403,
          "testName": "opens inspect modal and loads server inspection data",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 428,
          "testName": "handles inspect failure with error toast",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 445,
          "testName": "sets inspect active tab and search query",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerCard.test.tsx",
          "lineNumber": 66,
          "testName": "renders connecting/retrying state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerCard.test.tsx",
          "lineNumber": 83,
          "testName": "renders failed state with retry button",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerCard.test.tsx",
          "lineNumber": 106,
          "testName": "renders disconnected state with connect button and hidden badge",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerCard.test.tsx",
          "lineNumber": 129,
          "testName": "renders disabled state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 41,
          "testName": "renders Add MCP Server form with default values when in add mode",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 62,
          "testName": "renders Edit MCP Server form populated with server details when editing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 83,
          "testName": "switches to connection command when STDIO transport type is selected",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 104,
          "testName": "shows custom header input when auth shape is custom-header or query",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 127,
          "testName": "closes modal when cancel button or close X is clicked",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 147,
          "testName": "submits form with correctly formatted payload including trimmed categories",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-02",
      "category": "MCP",
      "type": "Positive",
      "description": "All MCP protocol capabilities enforce caller role authorizations consistently",
      "proofCount": 4,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PairwiseIntegrationMatrixTests.cs",
          "lineNumber": 385,
          "testName": "Pairwise_AllCapabilities_UnderCallerRoles_EvaluateCorrectly",
          "details": "Verifies that all 5 MCP capability methods enforce caller role authorizations consistently."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 34,
          "testName": "ListToolsAsync_ReturnsMetaTools_InMetaMode",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 55,
          "testName": "InvalidateCache_ClearsPopulatedState",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 363,
          "testName": "ToolListing_And_Remapping_Works_Correctly",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-05",
      "category": "MCP",
      "type": "Positive",
      "description": "ResourceRoutingManager returns all registered resources when search query is empty.",
      "proofCount": 10,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ResourceRoutingManagerTests.cs",
          "lineNumber": 8,
          "testName": "SearchResourcesAsync_ReturnsAll_WhenQueryIsEmpty",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ResourceRoutingManagerTests.cs",
          "lineNumber": 23,
          "testName": "SearchResourcesAsync_FiltersByQuery_MatchingNameOrDescription",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ResourceRoutingManagerTests.cs",
          "lineNumber": 41,
          "testName": "ReadResourceAsync_LocalBuiltInResources_ReturnCorrectJson",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ResourceRoutingManagerTests.cs",
          "lineNumber": 82,
          "testName": "ListResourceTemplatesAsync_ReturnsBuiltInTemplates",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 426,
          "testName": "ResourceRouting_And_UriTranslation_Works_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 782,
          "testName": "BuiltInResources_Templates_And_Autocompletion_Works_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 992,
          "testName": "CustomUserPrompts_And_Resources_Work_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecurityValidationHelperTests.cs",
          "lineNumber": 61,
          "testName": "ValidateResourceUri_ValidatesUris",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ResourceRoutingTests.cs",
          "lineNumber": 5,
          "testName": "SearchResourcesAsync_FiltersResourcesCorrectly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ResourceTesterCard.test.tsx",
          "lineNumber": 47,
          "testName": "handles custom URI input and submit",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-06",
      "category": "MCP",
      "type": "Positive",
      "description": "prompts/list aggregates, namespaces, and routes prompts to target backends.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 514,
          "testName": "PromptListAggregation_And_Routing_Works_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 868,
          "testName": "MetaPrompts_Works_Correctly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PromptTesterCard.test.tsx",
          "lineNumber": 53,
          "testName": "triggers arg change and form submit",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-08",
      "category": "MCP",
      "type": "Positive",
      "description": "completion/complete forwards prompt completions to backend when caller is authorized.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 439,
          "testName": "CompleteAsync_ForPrompt_ForwardsToBackend_WhenAuthorized",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 497,
          "testName": "CompleteAsync_ForResourceTemplate_ForwardsToBackend_WhenAuthorized",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/UnifiedMcpAuthorizationTests.cs",
          "lineNumber": 555,
          "testName": "CompleteAsync_LogsTemplate_ReturnsOnlyAuthorizedServers",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-10",
      "category": "MCP",
      "type": "Positive",
      "description": "DockerAutoDiscoveryService handles missing Docker socket gracefully without throwing unhandled exceptions.",
      "proofCount": 5,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SeederAndDiscoveryTests.cs",
          "lineNumber": 83,
          "testName": "DockerAutoDiscovery_ScanContainers_HandlesMissingSocketGracefully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs",
          "lineNumber": 45,
          "testName": "Service_Initializes_With_Valid_Dependencies",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs",
          "lineNumber": 79,
          "testName": "ExecuteAsync_SkipsScan_WhenDockerSocketDoesNotExist",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs",
          "lineNumber": 103,
          "testName": "ParseDiscoveredServers_ParsesValidDockerContainerLabels",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DockerAutoDiscoveryServiceTests.cs",
          "lineNumber": 137,
          "testName": "UpsertDiscoveredServers_AddsNewServers_AndDisablesStoppedServers",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-12",
      "category": "MCP",
      "type": "Positive",
      "description": "DynamicEmbeddingService retrieves and persists embedding provider configurations in Settings table.",
      "proofCount": 19,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 62,
          "testName": "DynamicEmbeddingService_Gets_And_Saves_Settings",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 108,
          "testName": "ReloadSettings_UpdatesSettingsAndActiveService",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 125,
          "testName": "DynamicEmbeddingService_GetEmbeddingAsync_Uses_ApiProvider_When_Configured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 149,
          "testName": "CosineSimilarity_Calculates_Correct_Vector_Distance",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 173,
          "testName": "PreWarmAsync_Executes_Without_Throwing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DynamicEmbeddingServiceTests.cs",
          "lineNumber": 193,
          "testName": "GenerateEmbeddingAsync_Uses_UnderlyingProvider",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs",
          "lineNumber": 7,
          "testName": "Service_InitializesAndSetsUpPaths",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs",
          "lineNumber": 20,
          "testName": "ReloadSettings_ClearsSessionAndTokenizerState",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs",
          "lineNumber": 33,
          "testName": "CosineSimilarity_CalculatesOrthogonalAndIdenticalVectors",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/OnnxEmbeddingServiceTests.cs",
          "lineNumber": 51,
          "testName": "GetEmbeddingAsync_ReturnsEmpty384Vector_ForEmptyString",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SemanticSearchServiceTests.cs",
          "lineNumber": 42,
          "testName": "SearchToolsSemanticAsync_ScoresAndRanksTools",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SemanticSearchServiceTests.cs",
          "lineNumber": 61,
          "testName": "SearchTools_KeywordMatching_WorksCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SemanticSearchServiceTests.cs",
          "lineNumber": 78,
          "testName": "SearchToolsSemanticAsync_FallsBackToKeyword_WhenEmbeddingServiceThrows",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SeederAndDiscoveryTests.cs",
          "lineNumber": 100,
          "testName": "SemanticSearchService_Fallback_With_DummyEmbeddings",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EmbeddingServiceTests.cs",
          "lineNumber": 61,
          "testName": "ApiEmbeddingService_GetEmbeddingAsync_Returns_Vector_From_OpenAI_Response",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ToolRoutingManagerTests.cs",
          "lineNumber": 64,
          "testName": "CallToolAsync_SearchTools_ReturnsSemanticResults",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 683,
          "testName": "SemanticToolSearchRanking_Sorts_By_Score",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ApiEmbeddingServiceTests.cs",
          "lineNumber": 5,
          "testName": "CalculateCosineSimilarity_ComputesSimilarity",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ApiEmbeddingServiceTests.cs",
          "lineNumber": 17,
          "testName": "ReloadSettings_UpdatesSettings",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-15",
      "category": "MCP",
      "type": "Positive",
      "description": "All JSON-RPC results return a resultType discriminator (complete or input_required) per MCP 2026-07-28 spec.",
      "proofCount": 4,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProtocolResultTypeTests.cs",
          "lineNumber": 7,
          "testName": "EnsureResultType_AttachesComplete_WhenMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProtocolResultTypeTests.cs",
          "lineNumber": 23,
          "testName": "EnsureResultType_PreservesExistingResultType",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProtocolResultTypeTests.cs",
          "lineNumber": 39,
          "testName": "EnsureResultType_HandlesNullResult",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProtocolResultTypeTests.cs",
          "lineNumber": 53,
          "testName": "EnsureResultType_HandlesJsonElement",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-21",
      "category": "MCP",
      "type": "Positive",
      "description": "Admin endpoint handles direct Streamable HTTP POST tools/list request returning JSON even with Accept text/event-stream header.",
      "proofCount": 8,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 370,
          "testName": "AdminEndpoint_DirectPost_ToolsList_ReturnsJson_EvenWithSseAcceptHeader",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 401,
          "testName": "AdminEndpoint_DirectPost_Notification_ReturnsAccepted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 421,
          "testName": "TargetAdminEndpoint_DirectPost_ToolsList_ReturnsJson",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpSpecMiddlewareTests.cs",
          "lineNumber": 8,
          "testName": "Middleware_Parses_2026_Spec_Headers",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpSpecMiddlewareTests.cs",
          "lineNumber": 36,
          "testName": "Middleware_Falls_Back_To_Json_Body_When_Headers_Missing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpSpecMiddlewareTests.cs",
          "lineNumber": 64,
          "testName": "Middleware_Matches_Admin_And_Target_Proxy_Paths",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpSpecMiddlewareTests.cs",
          "lineNumber": 86,
          "testName": "Middleware_Detects_Notifications_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpSpecMiddlewareTests.cs",
          "lineNumber": 103,
          "testName": "Middleware_Skips_Non_Mcp_Paths",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-ENDPOINT-CALL-TOOL",
      "category": "MCP",
      "type": "Positive",
      "description": "Admin endpoint /admin/message executes tools/call for manage_system diagnostics.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 294,
          "testName": "AdminEndpoint_SseSession_CallTool_ManageSystemDiagnostics",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-ENDPOINT-HEAD-REQUEST",
      "category": "MCP",
      "type": "Positive",
      "description": "Admin endpoint /admin handles HEAD request returning text/event-stream headers.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 212,
          "testName": "AdminEndpoint_HeadRequest_ReturnsEventStreamHeaders",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-ENDPOINT-LIST-TOOLS",
      "category": "MCP",
      "type": "Positive",
      "description": "Admin endpoint /admin/message executes tools/list over active SSE session and returns 10 admin tools.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 224,
          "testName": "AdminEndpoint_SseSession_ListTools",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-ENDPOINT-ROUTER-ADMIN-TARGET",
      "category": "MCP",
      "type": "Positive",
      "description": "Target proxy endpoint /router-admin routes directly to the Admin MCP server.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 149,
          "testName": "TargetProxy_RouterAdmin_RoutesToAdminServer",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-ENDPOINT-SSE-HANDSHAKE",
      "category": "MCP",
      "type": "Positive",
      "description": "Admin endpoint /admin/sse performs initialize handshake with 2026-07-28 protocol version.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminEndpointsTests.cs",
          "lineNumber": 62,
          "testName": "AdminEndpoint_SseHandshake_NegotiatesProtocol",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-INITIALIZE-HANDSHAKE",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer initialize handles protocol negotiation for 2026-07-28 and 2024-11-05.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 195,
          "testName": "HandleInitializeAsync_NegotiatesProtocolVersion",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-APPKEYS",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_appkeys supports full parity for list, get_limits, create, and revoke actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 370,
          "testName": "ManageAppKeys_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-CLIENTS",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_clients supports full parity for register, list, and delete actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 423,
          "testName": "ManageClients_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-CUSTOM-FILES",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_custom_files supports full parity for list, get, save, and delete prompt and resource files.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 716,
          "testName": "ManageCustomFiles_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-GROUP-MAPPINGS",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_group_mappings supports full parity for list, save, and delete external-to-internal group mappings.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 530,
          "testName": "ManageGroupMappings_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-JSONRPC-DISPATCH",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer processes standard JSON-RPC 2.0 requests (tools/list, tools/call, ping).",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 873,
          "testName": "AdminTools_ProcessRequest_JsonRpcProtocol",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-POLICIES",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_policies supports full parity for list, save, and delete access control policies.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 464,
          "testName": "ManagePolicies_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-PROVIDERS",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_providers supports full parity for list, save_secret, test_vault, save_auth, and test_ldap actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 577,
          "testName": "ManageProviders_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-SERVERS",
      "category": "MCP",
      "type": "Positive",
      "description": "Validates that the manage_servers tool provides comprehensive administrative capabilities including listing, retrieving, creating, updating, toggling, deleting, and reconnecting servers.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 234,
          "testName": "ManageServers_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-SETTINGS",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_settings supports full parity for get and update global router configurations.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 667,
          "testName": "ManageSettings_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-SYSTEM",
      "category": "MCP",
      "type": "Positive",
      "description": "manage_system supports full parity for diagnostics, get_logs, clear_logs, and query_audit actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 816,
          "testName": "ManageSystem_Parity_AllActions",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-TEST-TOOL-CALL",
      "category": "MCP",
      "type": "Positive",
      "description": "test_tool_call executes test bench backend tool calls and formats responses.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 846,
          "testName": "TestToolCall_Execution_Parity",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-PARITY-TOOLS-COVERAGE",
      "category": "MCP",
      "type": "Positive",
      "description": "Ensures every UI management workflow is backed by a verified, equivalent action within the consolidated Admin MCP tools.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminToolsParityTests.cs",
          "lineNumber": 191,
          "testName": "AdminTools_ExecuteSuccessfully",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-SKILL-E2E-PROVISIONING",
      "category": "MCP",
      "type": "Positive",
      "description": "Admin automation templates and JSON-RPC tool calls successfully provision a blank-slate gateway instance end-to-end via HTTP /admin/message.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminAutomationSkillTests.cs",
          "lineNumber": 176,
          "testName": "EndToEnd_BlankSlateProvisioning_ConfiguresAllEntitiesViaAdminTools",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-SKILL-FRONTMATTER",
      "category": "MCP",
      "type": "Positive",
      "description": "mcg-admin skill frontmatter is valid YAML, specifies name, description starting with \u0027Use when...\u0027, and length is under 1024 characters",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminAutomationSkillTests.cs",
          "lineNumber": 21,
          "testName": "Skill_Frontmatter_IsValidAndWithinCharacterLimit",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-SKILL-MIRROR",
      "category": "MCP",
      "type": "Positive",
      "description": "mcg-admin skill files and templates are identically mirrored between skills/ and .agents/skills/ directories",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminAutomationSkillTests.cs",
          "lineNumber": 147,
          "testName": "Skill_MirroredInAgentsDirectory",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-SKILL-TEMPLATES",
      "category": "MCP",
      "type": "Positive",
      "description": "All mcg-admin scaffold templates exist, are non-empty, and contain valid JSON or scripts for Authentik, Keycloak, Entra, ActiveDirectory, Cloudflare, Vault, Embeddings, Docker, and shell automation",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminAutomationSkillTests.cs",
          "lineNumber": 103,
          "testName": "Templates_AllExistAndAreValidJsonOrScripts",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-SKILL-WORKFLOW",
      "category": "MCP",
      "type": "Positive",
      "description": "mcg-admin skill contains all 7 administration phases including diagnostics, secrets, auth providers, RBAC/group mappings, settings/embeddings, servers/clients, and live tool verification",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminAutomationSkillTests.cs",
          "lineNumber": 47,
          "testName": "Skill_ContainsAllRequiredPhasesAndProviderCookbooks",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-AUDIT-LOG",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer tool calls record audit log entries with caller and tool name.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 266,
          "testName": "CallToolAsync_RecordsAuditLog",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-APPKEYS",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_appkeys create, list, limits, and revoke actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 283,
          "testName": "CallToolAsync_ManageAppKeys_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-CLIENTS",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_clients register, list, and delete actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 330,
          "testName": "CallToolAsync_ManageClients_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-CUSTOM-FILES",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_custom_files save, get, list, and delete actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 504,
          "testName": "CallToolAsync_ManageCustomFiles_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-GROUP-MAPPINGS",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_group_mappings save, list, and delete actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 402,
          "testName": "CallToolAsync_ManageGroupMappings_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-POLICIES",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_policies save, list, and delete actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 368,
          "testName": "CallToolAsync_ManagePolicies_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-PROVIDERS",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_providers list, save_secret, and save_auth actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 435,
          "testName": "CallToolAsync_ManageProviders_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-SERVERS",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_servers list, get, create, update, toggle, and delete actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 214,
          "testName": "CallToolAsync_ManageServers_ListAndCreate",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-SETTINGS",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_settings get and update actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 478,
          "testName": "CallToolAsync_ManageSettings_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOL-MANAGE-SYSTEM",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer executes manage_system diagnostics, get_logs, clear_logs, and query_audit actions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 558,
          "testName": "CallToolAsync_ManageSystem_Lifecycle",
          "details": null
        }
      ]
    },
    {
      "id": "MCP-ADMIN-TOOLS-LIST-COUNT",
      "category": "MCP",
      "type": "Positive",
      "description": "AdminMcpServer tools/list returns all 10 consolidated tools with complete JSON schemas.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 147,
          "testName": "ListToolsAsync_ReturnsTenConsolidatedTools",
          "details": null
        }
      ]
    },
    {
      "id": "UI-104",
      "category": "MCP",
      "type": "Positive",
      "description": "renders resource tester with servers and resources",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ResourceTesterCard.test.tsx",
          "lineNumber": 1,
          "testName": "renders resource tester with servers and resources",
          "details": null
        }
      ]
    },
    {
      "id": "UI-106",
      "category": "MCP",
      "type": "Positive",
      "description": "renders connected server details with badges and triggers actions",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerCard.test.tsx",
          "lineNumber": 1,
          "testName": "renders connected server details with badges and triggers actions",
          "details": null
        }
      ]
    },
    {
      "id": "UI-107",
      "category": "MCP",
      "type": "Positive",
      "description": "renders prompt dropdown and filters by selected server",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/PromptTesterCard.test.tsx",
          "lineNumber": 1,
          "testName": "renders prompt dropdown and filters by selected server",
          "details": null
        }
      ]
    },
    {
      "id": "UI-112",
      "category": "MCP",
      "type": "Positive",
      "description": "renders nothing when isAddEditOpen is false",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerModal.test.tsx",
          "lineNumber": 1,
          "testName": "renders nothing when isAddEditOpen is false",
          "details": null
        }
      ]
    },
    {
      "id": "UI-121",
      "category": "MCP",
      "type": "Positive",
      "description": "should open Add Server modal and switch secret provider types",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/server-management.spec.ts",
          "lineNumber": 1,
          "testName": "should open Add Server modal and switch secret provider types",
          "details": null
        }
      ]
    },
    {
      "id": "UI-126",
      "category": "MCP",
      "type": "Positive",
      "description": "should open Server Inspect Modal if servers are present on dashboard",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/server-inspector.spec.ts",
          "lineNumber": 1,
          "testName": "should open Server Inspect Modal if servers are present on dashboard",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-106",
      "category": "SEC",
      "type": "Negative",
      "description": "Exchange throws InvalidOperationException when request is null.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 19,
          "testName": "Exchange_ThrowsInvalidOperationException_WhenRequestNull",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-107",
      "category": "SEC",
      "type": "Positive",
      "description": "RegisterClient successfully handles DCR requests when open DCR is enabled.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 36,
          "testName": "RegisterClient_CreatesApplicationAndReturnsOk",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-108",
      "category": "SEC",
      "type": "Negative",
      "description": "Authorize throws InvalidOperationException when OIDC request is null.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 77,
          "testName": "Authorize_ThrowsInvalidOperationException_WhenRequestNull",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-109",
      "category": "SEC",
      "type": "Positive",
      "description": "RegisterClient uses IOAuthClientRepository when IOpenIddictApplicationManager is null.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 94,
          "testName": "RegisterClient_UsesOAuthClientRepository_WhenApplicationManagerNull",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/pages/ConsentView.test.tsx",
          "lineNumber": 16,
          "testName": "renders client name from query string and sets form action",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/oauth-consent-flow.spec.ts",
          "lineNumber": 5,
          "testName": "should render interactive OAuth consent screen and display requesting client name",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-111",
      "category": "SEC",
      "type": "Negative",
      "description": "Pipeline exposes RFC 9728 OAuth Protected Resource discovery endpoints with dynamic resource identifiers.",
      "proofCount": 8,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 62,
          "testName": "Pipeline_WellKnown_Endpoints_ReturnSuccess",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 159,
          "testName": "Exchange_ClientCredentials_ValidSecret_ReturnsSignInResult",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 206,
          "testName": "Exchange_ClientCredentials_InvalidSecret_ReturnsForbid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 251,
          "testName": "Exchange_ClientCredentials_ExpiredClient_ReturnsForbid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 84,
          "testName": "CreateClient_ReturnsOk_WithGeneratedCredentials",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 153,
          "testName": "DatabaseAssertion_PlaintextNotPersisted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 179,
          "testName": "CreateClient_AdminCreator_DoesNotInheritAdminSid",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 215,
          "testName": "CreateClient_WithExpiresInDays_SetsExpiration",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-112",
      "category": "SEC",
      "type": "Negative",
      "description": "Authorize resolves client application from IOAuthClientRepository and redirects to consent.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 297,
          "testName": "Authorize_ResolvesClientAndRedirectsToConsent",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 120,
          "testName": "DeleteClient_ReturnsNoContent_WhenAppExists",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ClientsControllerTests.cs",
          "lineNumber": 141,
          "testName": "DeleteClient_ReturnsNotFound_WhenAppDoesNotExist",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-113",
      "category": "SEC",
      "type": "Positive",
      "description": "RegisterClient supports public clients with PKCE (token_endpoint_auth_method: none) and omits client secret.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 351,
          "testName": "RegisterClient_PublicClient_SucceedsWithoutSecret",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-114",
      "category": "SEC",
      "type": "Negative",
      "description": "RegisterClient rejects invalid or non-absolute redirect URIs with standard RFC 7591 invalid_redirect_uri error.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 400,
          "testName": "RegisterClient_InvalidRedirectUri_ReturnsBadRequest",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-115",
      "category": "SEC",
      "type": "Positive",
      "description": "RegisterClient dynamically binds requested scopes to OpenIddict application descriptor permissions.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 435,
          "testName": "RegisterClient_DynamicScopes_AddedToPermissions",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-116",
      "category": "SEC",
      "type": "Negative",
      "description": "Exchange rejects client_credentials grant attempts by public clients with UnauthorizedClient error.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 475,
          "testName": "Exchange_PublicClient_ClientCredentials_ReturnsForbid",
          "details": null
        }
      ]
    },
    {
      "id": "AUTH-117",
      "category": "SEC",
      "type": "Negative",
      "description": "RegisterClient returns 403 Forbidden with access_denied when open client registration is disabled and caller is unauthorized.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuthorizationControllerTests.cs",
          "lineNumber": 516,
          "testName": "RegisterClient_WhenClosedRegistration_UnauthorizedUser_ReturnsForbidden",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-01",
      "category": "SEC",
      "type": "Positive",
      "description": "SQLite database is encrypted at rest using SQLCipher with DB_ENCRYPTION_KEY.",
      "proofCount": 13,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseEncryptionTests.cs",
          "lineNumber": 8,
          "testName": "SqliteDatabase_IsEncrypted_WithSQLCipher",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 70,
          "testName": "SaveSecretProvider_EncryptsConfigJson_AtRestInDatabase",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 99,
          "testName": "SaveAuthProvider_EncryptsConfigJson_AtRestInDatabase",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 218,
          "testName": "ProvidersController_MaskPreserving_PreservesExistingDecryptedSecret_WhenMaskSubmitted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeyAuthenticationTests.cs",
          "lineNumber": 72,
          "testName": "SymmetricEncryptionHelper_EncryptsAndDecryptsCorrectly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs",
          "lineNumber": 14,
          "testName": "EnsureVaultClientAsync_CreatesClient_WithAppRoleCredentials",
          "details": "Verifies that VaultSecretRetriever authenticates with HashiCorp Vault using AppRole credentials."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs",
          "lineNumber": 35,
          "testName": "EnsureVaultClientAsync_LoadsFromSecretRepo_WhenConfigJsonHasAppRole",
          "details": "Verifies that VaultSecretRetriever loads AppRole credentials dynamically from repository."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultAppRoleAndRenewalTests.cs",
          "lineNumber": 87,
          "testName": "ReloadConfigAsync_ClearsClient_ForcesRecreation",
          "details": "Verifies that reloading config flushes cached Vault client and forces recreation."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 52,
          "testName": "DbEncryptionKey_Warning_Detection_Works_Correctly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DatabaseSeederServiceTests.cs",
          "lineNumber": 70,
          "testName": "Startup_MigratesLegacyKeysToHashedKeys",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SecretProvidersTab.test.tsx",
          "lineNumber": 19,
          "testName": "renders provider inputs and submits updated configuration",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SecretProvidersTab.test.tsx",
          "lineNumber": 90,
          "testName": "handles Test Vault connection button with success and failure responses",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/full-ui-flow-sse-vault.spec.ts",
          "lineNumber": 8,
          "testName": "should register SSE server with Vault provider (Mount/Path/Field), verify badge, and run semantic search",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-02",
      "category": "SEC",
      "type": "Positive",
      "description": "VaultSecretRetriever dynamically loads, applies, and reloads Vault configurations from database repository.",
      "proofCount": 27,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 294,
          "testName": "VaultSecretRetriever_DynamicallyLoadsAndAppliesDbConfig_WithReload",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 79,
          "testName": "GetSecretProviders_ReturnsOkWithList",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 121,
          "testName": "SaveSecretProvider_SavesSuccessfully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 257,
          "testName": "TestVaultConnection_ValidatesInputAndHandlesFailureGracefully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 349,
          "testName": "SaveSecretProvider_HttpUrl_AllowedForLocalhost",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProvidersControllerTests.cs",
          "lineNumber": 373,
          "testName": "SaveSecretProvider_HttpUrl_AllowedForSimpleHost",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs",
          "lineNumber": 8,
          "testName": "GetSecretForProviderAsync_ReturnsNull_WhenProviderIsNone",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs",
          "lineNumber": 26,
          "testName": "GetSecretForProviderAsync_RoutesToTargetProvider_AndCachesValue",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/CompositeSecretRetrieverTests.cs",
          "lineNumber": 48,
          "testName": "GetSecretForProviderAsync_MatchesVaultAliasNames",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 11,
          "testName": "ProviderName_ReturnsHashiCorpVault",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 36,
          "testName": "EnsureVaultClientAsync_ReturnsNull_WhenCredentialsMissing",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 56,
          "testName": "EnsureVaultClientAsync_CreatesClient_WhenValidConfig",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 78,
          "testName": "GetSecretAsync_ReturnsCachedValue_WhenPresent",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/VaultSecretRetrieverTests.cs",
          "lineNumber": 92,
          "testName": "GetSecretAsync_ReturnsNull_WhenClientIsNull",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 134,
          "testName": "SseTransport_ResolveTokenAsync_Uses_Custom_Path_Field_And_Mount",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 160,
          "testName": "HttpTransport_ResolveTokenAsync_Defaults_To_Url_And_ApiKey_When_Not_Configured",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 482,
          "testName": "ConnectAndInitializeBackendAsync_WithVaultServer_ResolvesRetrieverFromRootServices_WhenHttpContextIsNull",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 344,
          "testName": "StdioTransport_ShouldPassSecretViaEnvironmentVariables_AndNotCommandLine",
          "details": "Verifies that STDIO transport securely injects secret credentials via environment variables rather than command-line arguments."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 429,
          "testName": "StdioTransport_ShouldSanitizeAndMaskSecretsInLogs",
          "details": "Verifies that subprocess logs and stderr streams are actively sanitized to mask sensitive tokens and credentials."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 375,
          "testName": "Pipeline_GET_Providers_Secret_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs",
          "lineNumber": 37,
          "testName": "GetSecretAsync_MintsTokenViaTokenExchange_AndCachesResponse",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TokenExchangeSecretRetrieverTests.cs",
          "lineNumber": 127,
          "testName": "CompositeSecretRetriever_RoutesOboAndPocketIdAliases_ToTokenExchangeRetriever",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 41,
          "testName": "successfully loads auth and secret providers",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 131,
          "testName": "saves secret provider preserving Vault token and mount path",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 170,
          "testName": "saves Windows Registry and Environment secret providers correctly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useProviderStore.test.ts",
          "lineNumber": 205,
          "testName": "handles secret provider save error with toast and throws",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/vault-approle-config-flow.spec.ts",
          "lineNumber": 5,
          "testName": "should configure Vault AppRole credentials and test connection in settings",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-03",
      "category": "SEC",
      "type": "Positive",
      "description": "EnvironmentSecretRetriever retrieves configured environment variable value.",
      "proofCount": 5,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecretRetrieverTests.cs",
          "lineNumber": 5,
          "testName": "EnvironmentSecretRetriever_ReturnsEnvVariable_WhenExists",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecretRetrieverTests.cs",
          "lineNumber": 25,
          "testName": "EnvironmentSecretRetriever_ReturnsNull_WhenVariableDoesNotExist",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 370,
          "testName": "TrustedProxyHelper_AllowsXForwardedFor_WhenChainIsFullyTrusted",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/IdentityProviderTests.cs",
          "lineNumber": 431,
          "testName": "TrustedProxyHelper_ConfiguredProxyTrusted_CIDR",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EnvironmentSecretRetrieverTests.cs",
          "lineNumber": 5,
          "testName": "EnvironmentSecretRetriever_RetrievesSecret_FromEnvironmentVariables",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-04",
      "category": "SEC",
      "type": "Positive",
      "description": "WindowsRegistrySecretRetriever handles non-Windows platforms gracefully and returns null.",
      "proofCount": 4,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SecretRetrieverTests.cs",
          "lineNumber": 34,
          "testName": "WindowsRegistrySecretRetriever_HandlesNonWindowsGracefully",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs",
          "lineNumber": 12,
          "testName": "GetSecretAsync_ReturnsPlainString_WhenRegistryValueIsString",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs",
          "lineNumber": 27,
          "testName": "GetSecretAsync_DecryptsDpapiBytes_WhenRegistryValueIsByteArray",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/WindowsRegistrySecretRetrieverTests.cs",
          "lineNumber": 51,
          "testName": "GetSecretAsync_ReturnsNull_WhenKeyNotFoundOrNull",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-05",
      "category": "SEC",
      "type": "Negative",
      "description": "Audit queries support filtering by user, server, and pagination while recording query access in audit log.",
      "proofCount": 28,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditQueryApiTests.cs",
          "lineNumber": 60,
          "testName": "AuditQuery_ReturnsFilteredRows_AndLogsAuditAction",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditQueryApiTests.cs",
          "lineNumber": 83,
          "testName": "SavePolicy_WritesAuditAction_OnSuccess",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditQueryApiTests.cs",
          "lineNumber": 117,
          "testName": "SaveMapping_WritesAuditAction_OnSuccess",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditQueryApiTests.cs",
          "lineNumber": 150,
          "testName": "LogAdminActionAsync_WritesRowToAdminAuditLogs",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AppKeysControllerTests.cs",
          "lineNumber": 259,
          "testName": "GetAppKeys_ReturnsSanitizedKeys_ForAdminAndFiltered",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SanitizingLoggerProviderTests.cs",
          "lineNumber": 8,
          "testName": "SanitizingLoggerProvider_RedactsBearerTokensAndKeys",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SanitizingLoggerProviderTests.cs",
          "lineNumber": 43,
          "testName": "SanitizingLoggerProvider_LeavesPlainMessagesUnchanged",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SanitizingLoggerProviderTests.cs",
          "lineNumber": 76,
          "testName": "SanitizingLoggerProvider_RedactsSecretsInExceptionMessageAndToString",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 130,
          "testName": "ProvidersController_GetEndpoints_RedactSensitiveSecrets",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 185,
          "testName": "ProvidersController_SaveEndpoints_RedactAuditLogPayloads",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ProviderSettingsEncryptionTests.cs",
          "lineNumber": 388,
          "testName": "SaveSecretProvider_WhenDecryptionFailed_DoesNotOverwriteCorruptPayload",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditLoggerTests.cs",
          "lineNumber": 60,
          "testName": "LogInvocationAsync_WritesEntryToDatabase",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AuditLoggerTests.cs",
          "lineNumber": 75,
          "testName": "LogAdminActionAsync_WritesEntryToDatabase",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 393,
          "testName": "Pipeline_GET_Audit_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 420,
          "testName": "Pipeline_GET_Logs_Returns200",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 143,
          "testName": "AuditLogger_RecordsPerRequestActor_NotHandshakeActor",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/McpIntegrationTests.cs",
          "lineNumber": 1134,
          "testName": "Mcp_SessionId_IsOpaque_NotBearerToken",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PiiSanitizerTests.cs",
          "lineNumber": 5,
          "testName": "SanitizePayload_Redacts_Bearer_Tokens",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PiiSanitizerTests.cs",
          "lineNumber": 16,
          "testName": "SanitizePayload_Redacts_Api_Keys_And_Passwords",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PiiSanitizerTests.cs",
          "lineNumber": 29,
          "testName": "SanitizePayload_Redacts_ConnectionString_Passwords",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PiiSanitizerTests.cs",
          "lineNumber": 40,
          "testName": "LogBuffer_Add_Sanitizes_PII_Payloads",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PiiSanitizerTests.cs",
          "lineNumber": 53,
          "testName": "PiiSanitizer_Redacts_Basic_ApiKey_Cookie_QueryToken_UrlUserInfo",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LogsTerminalCard.test.tsx",
          "lineNumber": 61,
          "testName": "renders RPC message stream with formatted JSON",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LogsTerminalCard.test.tsx",
          "lineNumber": 81,
          "testName": "toggles autoscroll and handles clear logs",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LogsTerminalCard.test.tsx",
          "lineNumber": 108,
          "testName": "shows empty state when no logs match filter",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTabLogoUpload.test.tsx",
          "lineNumber": 56,
          "testName": "renders img live preview when dashboardIcon is an image URL",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTabLogoUpload.test.tsx",
          "lineNumber": 88,
          "testName": "updates dashboardIcon and live preview when a logo image file is uploaded",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTabLogoUpload.test.tsx",
          "lineNumber": 141,
          "testName": "saves settings with the updated logo URL when form is submitted after upload",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-ADMIN-AUDIT-REDACTION",
      "category": "SEC",
      "type": "Positive",
      "description": "AdminMcpServer redacts sensitive secrets from argument payloads before recording audit logs.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminMcpServerTests.cs",
          "lineNumber": 609,
          "testName": "CallToolAsync_AuditLog_RedactsSensitivePayloadData",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-GATEWAY-ZERO-CONFIG-BOOT",
      "category": "SEC",
      "type": "Positive",
      "description": "Gateway boots from a blank slate with zero master key environment variables, auto-generates .master.key, and serves health and admin endpoints.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/AdminAutomationSkillTests.cs",
          "lineNumber": 352,
          "testName": "Gateway_BlankSlate_WithoutMasterKeyEnv_AutoGeneratesKeyFileAndBootsSuccessfully",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEY-PROVIDER-AUTOGEN",
      "category": "SEC",
      "type": "Positive",
      "description": "EncryptionKeyProvider delegates to DbKeyHelper to auto-generate master key when unconfigured.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EncryptionKeyProviderTests.cs",
          "lineNumber": 42,
          "testName": "GetDbEncryptionKey_AutoGenerates_WhenUnconfigured",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEY-PROVIDER-CONFIG",
      "category": "SEC",
      "type": "Positive",
      "description": "EncryptionKeyProvider returns configured DB_ENCRYPTION_KEY or MCG_SECRET.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EncryptionKeyProviderTests.cs",
          "lineNumber": 28,
          "testName": "GetDbEncryptionKey_UsesConfig_WhenProvided",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEY-PROVIDER-FALLBACK",
      "category": "SEC",
      "type": "Positive",
      "description": "EncryptionKeyProvider falls back to DB_ENCRYPTION_KEY when MCG_SECRET is unconfigured.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EncryptionKeyProviderTests.cs",
          "lineNumber": 70,
          "testName": "GetRouterSecret_FallsBackToDbEncryptionKey_WhenDbEncryptionKeyProvided",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEY-PROVIDER-SECRET",
      "category": "SEC",
      "type": "Positive",
      "description": "EncryptionKeyProvider returns configured MCG_SECRET.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/EncryptionKeyProviderTests.cs",
          "lineNumber": 56,
          "testName": "GetRouterSecret_UsesConfig_WhenProvided",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYFILE-AUTOGEN",
      "category": "SEC",
      "type": "Positive",
      "description": "Blank-slate initialization auto-generates a 256-bit base64 master key and persists it to .master.key.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 63,
          "testName": "ResolveDbEncryptionKey_AutoGeneratesAndPersistsKey_WhenBlankSlate",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYFILE-ENV-PRECEDENCE",
      "category": "SEC",
      "type": "Positive",
      "description": "Explicit environment variables MCG_MASTER_KEY or MCG_SECRET take precedence over keyfiles.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 28,
          "testName": "ResolveDbEncryptionKey_ReturnsConfiguredEnvKey_WhenPresent",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYFILE-FILE-OVER-KEYFILE",
      "category": "SEC",
      "type": "Positive",
      "description": "Explicit file secrets take precedence over persistent .master.key files.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 123,
          "testName": "ResolveDbEncryptionKey_FileSecretTakesPrecedenceOverKeyFile",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYFILE-FILE-SECRET",
      "category": "SEC",
      "type": "Positive",
      "description": "File-based secrets configured via MCG_MASTER_KEY_FILE or standard Docker secrets paths are resolved.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 45,
          "testName": "ResolveDbEncryptionKey_ReturnsFileSecret_WhenKeyFileSpecified",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYFILE-HIERARCHY-PRECEDENCE",
      "category": "SEC",
      "type": "Positive",
      "description": "Explicit environment variables take precedence over file secrets and keyfiles.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 101,
          "testName": "ResolveDbEncryptionKey_EnvVarTakesPrecedenceOverFileSecretAndKeyFile",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYFILE-RELOAD",
      "category": "SEC",
      "type": "Positive",
      "description": "Existing .master.key file is loaded across gateway restarts without key mutation.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 83,
          "testName": "ResolveDbEncryptionKey_LoadsExistingKeyFile_OnSubsequentBoot",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYSOURCE-DETECTION",
      "category": "SEC",
      "type": "Positive",
      "description": "Correctly identifies KeySource origin for environment, file, and auto-generated keys.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 144,
          "testName": "ResolveDbEncryptionKey_IdentifiesKeySourceAccurately",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-KEYSOURCE-SETCACHEDKEY",
      "category": "SEC",
      "type": "Positive",
      "description": "SetCachedKey sets in-memory encryption key and updates ActiveKeySource.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 314,
          "testName": "SetCachedKey_UpdatesCachedKeyAndActiveKeySource",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-MASTERKEY-ATOMIC-REENCRYPTION",
      "category": "SEC",
      "type": "Positive",
      "description": "Atomically re-encrypts database credentials when setting a custom master key.",
      "proofCount": 5,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs",
          "lineNumber": 142,
          "testName": "SetMasterKey_AtomicallyReEncryptsDatabaseCredentials",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs",
          "lineNumber": 241,
          "testName": "SetMasterKey_RejectsWhenKeySourceIsExternalOrVault",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs",
          "lineNumber": 259,
          "testName": "AdminMcpServer_ManageSystem_SetMasterKey_ReencryptsCleanly",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/MasterKeyReEncryptionTests.cs",
          "lineNumber": 338,
          "testName": "SetMasterKey_RejectsInvalidOrShortKeys",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 481,
          "testName": "Pipeline_POST_MasterKey_RejectsWhenExternalKeySource",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-MASTERKEY-CONFIGURED-STATUS-BADGE",
      "category": "SEC",
      "type": "Positive",
      "description": "Displays configured badge and rotate button when custom master key is configured.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTab.test.tsx",
          "lineNumber": 192,
          "testName": "renders configured badge and rotate key button when master key is Configured",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-MASTERKEY-CUSTOM-MODAL-REENCRYPTION",
      "category": "SEC",
      "type": "Positive",
      "description": "Validates master key inputs (length, match) and triggers atomic re-encryption.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MasterKeyModal.test.tsx",
          "lineNumber": 6,
          "testName": "validates key inputs and submits custom master key to callback",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MasterKeyModal.test.tsx",
          "lineNumber": 54,
          "testName": "generates a strong random master key when auto-generate button is clicked",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MasterKeyModal.test.tsx",
          "lineNumber": 85,
          "testName": "displays validation error when onSetMasterKey returns failure",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-MASTERKEY-EXTERNAL-LOCKED-BADGE",
      "category": "SEC",
      "type": "Positive",
      "description": "Displays locked badge when master key is externally managed via Vault or Environment.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTab.test.tsx",
          "lineNumber": 149,
          "testName": "renders locked badge when master key is managed externally",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-MASTERKEY-UI-STATUS-BANNER",
      "category": "SEC",
      "type": "Positive",
      "description": "Displays warning banner when keySource is AutoGenerated and opens custom master key modal.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTab.test.tsx",
          "lineNumber": 115,
          "testName": "renders AutoGenerated warning banner and opens MasterKeyModal",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-VAULT-BOOTSTRAPPING",
      "category": "SEC",
      "type": "Positive",
      "description": "Bootstraps master encryption key directly from HashiCorp Vault when VAULT_ADDR is configured.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 191,
          "testName": "ResolveDbEncryptionKey_BootstrapsFromVault_WhenVaultConfigured",
          "details": null
        }
      ]
    },
    {
      "id": "SEC-VAULT-CUSTOM-PATH",
      "category": "SEC",
      "type": "Positive",
      "description": "Bootstraps master key from Vault using custom mount path and secret key name.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/DbKeyHelperTests.cs",
          "lineNumber": 236,
          "testName": "ResolveDbEncryptionKey_BootstrapsFromVault_WithCustomPathAndKeyName",
          "details": null
        }
      ]
    },
    {
      "id": "UI-105",
      "category": "SEC",
      "type": "Positive",
      "description": "renders system logs and handles level filter",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LogsTerminalCard.test.tsx",
          "lineNumber": 1,
          "testName": "renders system logs and handles level filter",
          "details": null
        }
      ]
    },
    {
      "id": "TRANS-01",
      "category": "TRANS",
      "type": "Positive",
      "description": "SendRequestAsync times out cleanly and removes pending completion handlers without leaking memory.",
      "proofCount": 11,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 276,
          "testName": "SendRequestAsync_TimesOutCleanly_AndDoesNotLeak",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 419,
          "testName": "SseBackend_Notification_IsForwardedToClient_WithAllFieldsIntact",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/SseTransportTests.cs",
          "lineNumber": 11,
          "testName": "ResolveTokenAsync_ReturnsApiKey_WhenProviderNone",
          "details": "Verifies that SSE transport resolves plaintext API key when secret provider is None."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ServerEndpointsValidationTests.cs",
          "lineNumber": 7,
          "testName": "IsValidStdioCommand_ValidatesExecutableAndDisallowsUnsafeCommands",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ServerEndpointsValidationTests.cs",
          "lineNumber": 38,
          "testName": "IsValidServerUrl_Accepts_Valid_Http_Urls",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 17,
          "testName": "SseTransport_ApplyAuthAndCustomHeaders_Formats_Standard_Headers",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 45,
          "testName": "SseTransport_ApplyAuthAndCustomHeaders_Formats_CustomHeader",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 67,
          "testName": "SseTransport_ApplyAuthAndCustomHeaders_Appends_QueryParameter",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 90,
          "testName": "HttpTransport_ApplyAuthAndCustomHeaders_Formats_CustomHeader",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/TransportsAuthShapeTests.cs",
          "lineNumber": 112,
          "testName": "SseTransport_ApplyAuthAndCustomHeaders_Parses_HeadersJson",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/full-ui-flow-http-direct.spec.ts",
          "lineNumber": 8,
          "testName": "should register HTTP server with Direct Key, verify status badge, and execute tool in Test Bench",
          "details": null
        }
      ]
    },
    {
      "id": "TRANS-02",
      "category": "TRANS",
      "type": "Positive",
      "description": "BackendConnection multiplexes 100\u002B concurrent asynchronous polymorphic RPC requests without deadlocking.",
      "proofCount": 12,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ChallengerTests.cs",
          "lineNumber": 494,
          "testName": "AsynchronousRouting_HighVolumeAndPolymorphic_DoesNotHang",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 12,
          "testName": "ConcurrentResponseIsolation_TwoCallersSameId_SucceedsWithReversedResponseOrder",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 114,
          "testName": "HighConcurrencyResponseIsolation_RepeatedIdsAcrossCallers",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 219,
          "testName": "TimeoutAndCancellationCleanup_DoesNotLeavePendingRequests",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 281,
          "testName": "BackendDisconnectCleanup_ClearsPendingRequests",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 352,
          "testName": "ConcurrentResponseIsolation_ExplicitNullId_Succeeds",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 427,
          "testName": "ConcurrentResponseIsolation_Notification_DoesNotExpectResponse",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 492,
          "testName": "ClientSession_ConcurrentStatelessRequestIsolateCancellation",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 552,
          "testName": "ClientSession_TargetedCancellation_DoesNotCancelOtherClientsReusingId",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/ConcurrentResponseIsolationTests.cs",
          "lineNumber": 621,
          "testName": "ConcurrentResponseIsolation_MixedNumericStringNullIds",
          "details": null
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/HttpTransportTests.cs",
          "lineNumber": 11,
          "testName": "ResolveTokenAsync_ReturnsApiKey_WhenProviderNone",
          "details": "Verifies that HTTP transport resolves plaintext API key when secret provider is None."
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/full-ui-flow-stdio-env.spec.ts",
          "lineNumber": 8,
          "testName": "should register STDIO server, verify card, and execute echo tool via Test Bench",
          "details": null
        }
      ]
    },
    {
      "id": "TRANS-03",
      "category": "TRANS",
      "type": "Positive",
      "description": "STDIO transport spawns subprocess, handles JSON-RPC initialization and executes tool calls",
      "proofCount": 5,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 49,
          "testName": "StdioTransport_ShouldInitializeAndCallToolSuccessfully",
          "details": "Verifies that STDIO transport spawns subprocess, handles JSON-RPC initialization and executes tool calls."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 170,
          "testName": "StdioTransport_ShouldRouteStderrToLogs",
          "details": "Verifies that STDIO transport streams subprocess stderr asynchronously to logs."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 242,
          "testName": "StdioTransport_ShouldSupportCancellationAndProcessTreeTermination",
          "details": "Verifies that STDIO transport terminates subprocess tree cleanly upon disposal or cancellation."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 327,
          "testName": "StdioTransport_ParseCommandLine_Handles_Quotes_And_Spaces",
          "details": "Verifies that STDIO command-line tokenizer preserves quoted arguments and space escaping."
        },
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/StdioTransportTests.cs",
          "lineNumber": 472,
          "testName": "StdioTransport_ShouldDrainReaderStreamsToEOF_WhenProcessExitsImmediately",
          "details": "Verifies that STDIO transport drains buffered stdout/stderr streams to EOF when process exits rapidly."
        }
      ]
    },
    {
      "id": "UI-01",
      "category": "UI",
      "type": "Positive",
      "description": "opens confirmation modal and resolves true when confirmed",
      "proofCount": 61,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useConfirmStore.test.ts",
          "lineNumber": 31,
          "testName": "opens confirmation modal and resolves true when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useConfirmStore.test.ts",
          "lineNumber": 58,
          "testName": "resolves false when cancelled",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useConfirmStore.test.ts",
          "lineNumber": 76,
          "testName": "settles existing pending promise with false when a new confirmation is opened",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/DashboardView.test.tsx",
          "lineNumber": 115,
          "testName": "renders empty state when no servers match search",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 26,
          "testName": "renders CustomFileModal in create mode and displays visual builder tabs",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 41,
          "testName": "allows adding and removing arguments in visual builder",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 68,
          "testName": "allows adding and removing messages in visual builder",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 95,
          "testName": "switches between Raw JSON Editor and Visual Prompt Builder with synchronization",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 177,
          "testName": "changes file type to resources and adjusts extension",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 194,
          "testName": "submits form and calls saveCustomFile",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 222,
          "testName": "renders in edit mode when editingFileMeta is set",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 244,
          "testName": "allows adding assistant messages, modifying argument required checkbox, and rendering empty arguments state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/HeaderBranding.test.tsx",
          "lineNumber": 37,
          "testName": "identifies FontAwesome class names and invalid inputs as non-image URLs",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/HeaderBranding.test.tsx",
          "lineNumber": 54,
          "testName": "updates document.title and sets custom image favicon when icon is an image URL",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/HeaderBranding.test.tsx",
          "lineNumber": 69,
          "testName": "sets default title and generated SVG favicon when branding is null or uses FontAwesome icon",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/HeaderBranding.test.tsx",
          "lineNumber": 87,
          "testName": "renders img element with logo-icon logo-img class when branding.icon is an image endpoint",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/HeaderBranding.test.tsx",
          "lineNumber": 115,
          "testName": "renders FontAwesome i element when branding.icon is a FontAwesome class",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MappingModal.test.tsx",
          "lineNumber": 27,
          "testName": "renders create mapping form with empty inputs",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MappingModal.test.tsx",
          "lineNumber": 42,
          "testName": "renders edit mapping form pre-filled with mapping data",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MappingModal.test.tsx",
          "lineNumber": 57,
          "testName": "submits form with externalId and internalGroup",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MappingModal.test.tsx",
          "lineNumber": 82,
          "testName": "closes modal on cancel click",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/Header.test.tsx",
          "lineNumber": 38,
          "testName": "renders admin badge and shield icon for full_admin users",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/Header.test.tsx",
          "lineNumber": 64,
          "testName": "renders standard user badge for non-admin users",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/Header.test.tsx",
          "lineNumber": 90,
          "testName": "does not render user status item when unauthenticated",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/Header.test.tsx",
          "lineNumber": 110,
          "testName": "displays gateway status and SSE endpoint",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/Header.test.tsx",
          "lineNumber": 126,
          "testName": "toggles light and dark theme on button click and updates document attribute",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsTabs.test.tsx",
          "lineNumber": 49,
          "testName": "renders IdentityAuthTab and SecretProvidersTab inside ProvidersTab",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsTabs.test.tsx",
          "lineNumber": 77,
          "testName": "renders CustomFilesTab and triggers modal open and delete",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsTabs.test.tsx",
          "lineNumber": 110,
          "testName": "renders AccessControlTab with policies and mappings",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsTabs.test.tsx",
          "lineNumber": 139,
          "testName": "renders BackupsTab",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsView.test.tsx",
          "lineNumber": 144,
          "testName": "saves embedding settings and displays success feedback",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsView.test.tsx",
          "lineNumber": 183,
          "testName": "saves Auth Provider configurations including Active Directory and OIDC header mappings",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsView.test.tsx",
          "lineNumber": 240,
          "testName": "saves secret providers while preserving Vault config and secrets",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsView.test.tsx",
          "lineNumber": 311,
          "testName": "renders custom files table with edit and delete actions",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsView.test.tsx",
          "lineNumber": 354,
          "testName": "renders access policies and group mappings with CRUD actions",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/TestBenchView.test.tsx",
          "lineNumber": 71,
          "testName": "handles semantic search queries in SemanticRouterCard",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/TestBenchView.test.tsx",
          "lineNumber": 99,
          "testName": "executes tool and updates console",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/TestBenchView.test.tsx",
          "lineNumber": 130,
          "testName": "executes prompt get in prompt tester tab",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/TestBenchView.test.tsx",
          "lineNumber": 164,
          "testName": "executes resource read in resource inspector tab",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SharedComponents.test.tsx",
          "lineNumber": 26,
          "testName": "renders title, children, and handles close button click",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SharedComponents.test.tsx",
          "lineNumber": 50,
          "testName": "renders various statuses correctly with indicators",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SharedComponents.test.tsx",
          "lineNumber": 72,
          "testName": "returns null when totalItems is 0",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SharedComponents.test.tsx",
          "lineNumber": 91,
          "testName": "renders page info and navigation controls",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SharedComponents.test.tsx",
          "lineNumber": 130,
          "testName": "handles pageSize all",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ConfirmModal.test.tsx",
          "lineNumber": 32,
          "testName": "renders title, message, and action buttons when open",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ConfirmModal.test.tsx",
          "lineNumber": 58,
          "testName": "calls handleConfirm when confirm button clicked",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ConfirmModal.test.tsx",
          "lineNumber": 82,
          "testName": "calls handleCancel when cancel button clicked",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LayoutCentering.test.tsx",
          "lineNumber": 19,
          "testName": "renders top navigation bar with centered alignment in layout.css and App",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LayoutCentering.test.tsx",
          "lineNumber": 42,
          "testName": "renders tester tabs with centered alignment in tester.css",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LayoutCentering.test.tsx",
          "lineNumber": 58,
          "testName": "renders SettingsView sub-navigation bar with centered alignment",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LayoutCentering.test.tsx",
          "lineNumber": 74,
          "testName": "renders AppKeysCard sub-navigation tabs with centered alignment for admin",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LayoutCentering.test.tsx",
          "lineNumber": 90,
          "testName": "uses body::before and body::after pseudo-elements for ambient gradients and removes background-decor DOM nodes",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/LayoutCentering.test.tsx",
          "lineNumber": 117,
          "testName": "defines focus-visible outline indicators for interactive focus styling",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/api/typedApi.test.ts",
          "lineNumber": 74,
          "testName": "calls client and appkey endpoints correctly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/api/typedApi.test.ts",
          "lineNumber": 125,
          "testName": "calls user quota endpoints correctly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/api/typedApi.test.ts",
          "lineNumber": 154,
          "testName": "calls policies and mappings endpoints correctly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/api/typedApi.test.ts",
          "lineNumber": 181,
          "testName": "calls settings, providers, custom files, approvals endpoints correctly",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/api/typedApi.test.ts",
          "lineNumber": 237,
          "testName": "calls testbench tool, prompt, resource, log endpoints correctly",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/prompts-resources-customfiles.spec.ts",
          "lineNumber": 42,
          "testName": "should navigate to Custom Files and Prompts in Settings view",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/dashboard.spec.ts",
          "lineNumber": 23,
          "testName": "should display aggregate statistics cards",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/dashboard.spec.ts",
          "lineNumber": 37,
          "testName": "should filter servers using search input",
          "details": null
        }
      ]
    },
    {
      "id": "UI-02",
      "category": "UI",
      "type": "Positive",
      "description": "Inspect modal displays spinner loading state while querying server capabilities",
      "proofCount": 6,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 61,
          "testName": "renders loading state when inspectLoading is true",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 79,
          "testName": "renders tools tab with schema and handles tab switching",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 116,
          "testName": "renders resources tab items and handles search filtering",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 144,
          "testName": "renders prompts tab with arguments and empty state when filtered out",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 166,
          "testName": "renders empty states for tabs when data is empty",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 194,
          "testName": "closes modal when close button is clicked",
          "details": null
        }
      ]
    },
    {
      "id": "UI-03",
      "category": "UI",
      "type": "Positive",
      "description": "Grouped server view renders category sections and supports collapsible groups",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/DashboardView.test.tsx",
          "lineNumber": 63,
          "testName": "renders grouped server view by category and allows collapsing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/DashboardView.test.tsx",
          "lineNumber": 90,
          "testName": "renders grouped server view by status and type",
          "details": null
        }
      ]
    },
    {
      "id": "UI-04",
      "category": "UI",
      "type": "Positive",
      "description": "Tool selector filters available tools by selected backend server",
      "proofCount": 7,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 77,
          "testName": "filters tools by selected server and handles tool change",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 106,
          "testName": "filters custom tools with no namespace prefix when selectedServer is custom",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 131,
          "testName": "renders dynamic fields for boolean, number, string, array, and object types",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 178,
          "testName": "renders empty state when selected tool takes no arguments",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 203,
          "testName": "switches to raw JSON tab and handles raw JSON editing",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 242,
          "testName": "handles form submission",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/prompts-resources-customfiles.spec.ts",
          "lineNumber": 5,
          "testName": "should interact with Prompt Tester and Resource Tester cards in Test Bench",
          "details": null
        }
      ]
    },
    {
      "id": "UI-05",
      "category": "UI",
      "type": "Positive",
      "description": "Router allows customized branding parameters (DashboardTitle, DashboardIcon) to be saved and retrieved via the API.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 253,
          "testName": "Pipeline_Settings_Branding_ReadWrite",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/HeaderBranding.test.tsx",
          "lineNumber": 7,
          "testName": "identifies image URLs and paths accurately",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/GeneralTabLogoUpload.test.tsx",
          "lineNumber": 6,
          "testName": "renders branding label and FontAwesome icon preview when icon is a CSS class",
          "details": null
        }
      ]
    },
    {
      "id": "UI-06",
      "category": "UI",
      "type": "Positive",
      "description": "Router supports uploading and retrieving custom branding logo images via dedicated endpoints.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Backend xUnit",
          "filePath": "/containers/dev/csharp-mcp-router/ModelContextGateway.Tests/PipelineIntegrationTests.cs",
          "lineNumber": 447,
          "testName": "Branding_Logo_Upload_And_Retrieval_Works",
          "details": null
        }
      ]
    },
    {
      "id": "UI-07",
      "category": "UI",
      "type": "Positive",
      "description": "Audits desktop viewport layout for zero horizontal overflow and high UX score.",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/layout-inspector.spec.ts",
          "lineNumber": 38,
          "testName": "should pass layout audit on desktop 1080p viewport",
          "details": null
        },
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/layout-inspector.spec.ts",
          "lineNumber": 64,
          "testName": "should pass layout audit on Samsung Galaxy S25\u002B mobile viewport",
          "details": null
        }
      ]
    },
    {
      "id": "UI-102",
      "category": "UI",
      "type": "Positive",
      "description": "Dashboard renders stats card, connected server list, and setup instructions",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/DashboardView.test.tsx",
          "lineNumber": 1,
          "testName": "renders stats card, server list, and client setup guide",
          "details": null
        }
      ]
    },
    {
      "id": "UI-103",
      "category": "UI",
      "type": "Positive",
      "description": "Interactive tool tester renders server and tool selection dropdowns",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ToolTesterCard.test.tsx",
          "lineNumber": 1,
          "testName": "renders initial server and tool selection options",
          "details": null
        }
      ]
    },
    {
      "id": "UI-108",
      "category": "UI",
      "type": "Positive",
      "description": "renders nothing when isMappingModalOpen is false",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/MappingModal.test.tsx",
          "lineNumber": 1,
          "testName": "renders nothing when isMappingModalOpen is false",
          "details": null
        }
      ]
    },
    {
      "id": "UI-109",
      "category": "UI",
      "type": "Positive",
      "description": "Renders ClientSetupGuide below the user credentials card.",
      "proofCount": 2,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/pages/MyMcpServers.test.tsx",
          "lineNumber": 102,
          "testName": "renders client setup guide below credentials card",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientSetupGuide.test.tsx",
          "lineNumber": 1,
          "testName": "renders default standard mcpServers configuration with meta mode",
          "details": null
        }
      ]
    },
    {
      "id": "UI-110",
      "category": "UI",
      "type": "Positive",
      "description": "renders title, MCG badge, subtitle, and version badge",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/Header.test.tsx",
          "lineNumber": 1,
          "testName": "renders title, MCG badge, subtitle, and version badge",
          "details": null
        }
      ]
    },
    {
      "id": "UI-111",
      "category": "UI",
      "type": "Positive",
      "description": "renders GeneralTab and triggers save",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsTabs.test.tsx",
          "lineNumber": 1,
          "testName": "renders GeneralTab and triggers save",
          "details": null
        }
      ]
    },
    {
      "id": "UI-113",
      "category": "UI",
      "type": "Positive",
      "description": "renders tab navigation and switches active subviews",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SettingsView.test.tsx",
          "lineNumber": 1,
          "testName": "renders tab navigation and switches active subviews",
          "details": null
        }
      ]
    },
    {
      "id": "UI-115",
      "category": "UI",
      "type": "Positive",
      "description": "renders test bench cards and switches tabs",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/TestBenchView.test.tsx",
          "lineNumber": 1,
          "testName": "renders test bench cards and switches tabs",
          "details": null
        }
      ]
    },
    {
      "id": "UI-116",
      "category": "UI",
      "type": "Positive",
      "description": "Modal remains hidden when isInspectOpen is false",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ServerInspectModal.test.tsx",
          "lineNumber": 1,
          "testName": "renders nothing when isInspectOpen is false",
          "details": null
        }
      ]
    },
    {
      "id": "UI-117",
      "category": "UI",
      "type": "Positive",
      "description": "returns null when isOpen is false",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SharedComponents.test.tsx",
          "lineNumber": 1,
          "testName": "returns null when isOpen is false",
          "details": null
        }
      ]
    },
    {
      "id": "UI-119",
      "category": "UI",
      "type": "Positive",
      "description": "calls server endpoints correctly",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/api/typedApi.test.ts",
          "lineNumber": 1,
          "testName": "calls server endpoints correctly",
          "details": null
        }
      ]
    },
    {
      "id": "UI-122",
      "category": "UI",
      "type": "Positive",
      "description": "should navigate to Settings view and configure vector embedding options",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/settings.spec.ts",
          "lineNumber": 1,
          "testName": "should navigate to Settings view and configure vector embedding options",
          "details": null
        }
      ]
    },
    {
      "id": "UI-124",
      "category": "UI",
      "type": "Positive",
      "description": "Renders main dashboard navigation tabs and layout headers",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/dashboard.spec.ts",
          "lineNumber": 1,
          "testName": "should render the dashboard layout and header components",
          "details": null
        }
      ]
    },
    {
      "id": "UI-128",
      "category": "UI",
      "type": "Positive",
      "description": "should navigate to Test Bench view and render tester cards",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Playwright E2E",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/e2e/testbench.spec.ts",
          "lineNumber": 1,
          "testName": "should navigate to Test Bench view and render tester cards",
          "details": null
        }
      ]
    },
    {
      "id": "UI-30",
      "category": "UI",
      "type": "Positive",
      "description": "Renders client registration form with inputs for name, client type, redirect URIs, grant types, scopes, and expiration.",
      "proofCount": 3,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientModal.test.tsx",
          "lineNumber": 27,
          "testName": "renders client registration form with rich OAuth fields and cancel button",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientModal.test.tsx",
          "lineNumber": 55,
          "testName": "submits registration form with parsed scopes array and OAuth metadata",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ClientModal.test.tsx",
          "lineNumber": 94,
          "testName": "renders one-time secret display result card with copy buttons when createdClientResult is populated",
          "details": null
        }
      ]
    },
    {
      "id": "UI-31",
      "category": "UI",
      "type": "Negative",
      "description": "Fetches registered OAuth clients and updates store state.",
      "proofCount": 7,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 37,
          "testName": "fetches registered clients and updates state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 213,
          "testName": "prompts confirmation and calls cleanupClientsApi when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 239,
          "testName": "cancels DCR cleanup when user cancels confirmation modal",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/RegisteredClientsCard.test.tsx",
          "lineNumber": 42,
          "testName": "renders header, register button, and calls fetchClients on mount",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/RegisteredClientsCard.test.tsx",
          "lineNumber": 73,
          "testName": "renders empty state when no registered clients exist",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/RegisteredClientsCard.test.tsx",
          "lineNumber": 90,
          "testName": "renders rich client columns and handles client ID copy",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/RegisteredClientsCard.test.tsx",
          "lineNumber": 136,
          "testName": "triggers deleteClient when Delete button is clicked",
          "details": null
        }
      ]
    },
    {
      "id": "UI-32",
      "category": "UI",
      "type": "Positive",
      "description": "Registers OAuth client with extended metadata (redirect URIs, grant types, client type, expiration) and captures one-time credentials.",
      "proofCount": 1,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 76,
          "testName": "creates client with one-time secret result and refreshes list",
          "details": null
        }
      ]
    },
    {
      "id": "UI-CONFIRM-MODAL",
      "category": "UI",
      "type": "Negative",
      "description": "Centralized promise-based confirmation store resolves true on confirmation and false on cancellation.",
      "proofCount": 16,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useConfirmStore.test.ts",
          "lineNumber": 4,
          "testName": "initializes in closed state",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 100,
          "testName": "deletes a policy when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 129,
          "testName": "does not delete policy when confirm is cancelled",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 202,
          "testName": "deletes a group mapping when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 231,
          "testName": "does not delete group mapping when confirm is cancelled",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 258,
          "testName": "deletes a custom file when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/usePolicyStore.test.ts",
          "lineNumber": 287,
          "testName": "does not delete custom file when confirm is cancelled",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 141,
          "testName": "prompts confirmation and deletes client when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 170,
          "testName": "cancels deletion when user denies confirmation",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 487,
          "testName": "confirms and revokes AppKey and refreshes list",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 516,
          "testName": "cancels revocation when confirm is rejected",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 632,
          "testName": "prompts confirmation modal and resets user quota when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useClientStore.test.ts",
          "lineNumber": 662,
          "testName": "cancels quota reset when user denies confirmation",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 269,
          "testName": "prompts window.confirm and deletes server when confirmed",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/stores/useServerStore.test.ts",
          "lineNumber": 298,
          "testName": "does not send delete request when confirm is cancelled",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/ConfirmModal.test.tsx",
          "lineNumber": 6,
          "testName": "renders nothing when closed",
          "details": null
        }
      ]
    },
    {
      "id": "UI-TOAST-TRANSITION",
      "category": "UI",
      "type": "Negative",
      "description": "Displays error toast notification when saving invalid JSON credentials for user-provided server.",
      "proofCount": 8,
      "proofs": [
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/pages/MyMcpServers.test.tsx",
          "lineNumber": 23,
          "testName": "shows error toast when saving invalid JSON credentials",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/pages/MyMcpServers.test.tsx",
          "lineNumber": 64,
          "testName": "saves valid credentials successfully and closes modal",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 112,
          "testName": "shows error toast when switching from invalid JSON to Visual Prompt Builder",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 133,
          "testName": "shows error toast when saving without a file name",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/CustomFileModal.test.tsx",
          "lineNumber": 153,
          "testName": "shows error toast when saving prompt with invalid JSON content",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/IdentityAuthTab.test.tsx",
          "lineNumber": 99,
          "testName": "saves updated Active Directory configuration JSON",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/IdentityAuthTab.test.tsx",
          "lineNumber": 138,
          "testName": "displays error toast when saving auth providers fails",
          "details": null
        },
        {
          "suite": "Frontend Vitest",
          "filePath": "/containers/dev/csharp-mcp-router/frontend/src/test/components/SecretProvidersTab.test.tsx",
          "lineNumber": 63,
          "testName": "displays error toast when saving secret providers fails",
          "details": null
        }
      ]
    }
  ]
}