[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F74BQBQMH44GCMAMPCRMCN":3,"skill-same:01M6F74BQBQMH44GCMAMPCRMCN":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6F74BQBQMH44GCMAMPCRMCN","guidewire-common-errors",null,"Diagnose and resolve common Guidewire InsuranceSuite errors.\nUse when encountering API errors, Gosu exceptions, validation failures,\nor integration issues in PolicyCenter, ClaimCenter, or BillingCenter.\nTrigger with phrases like \"guidewire error\", \"policycenter error\",\n\"claimcenter error\", \"gosu exception\", \"api error 422\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1979,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fguidewire-pack\u002Fskills\u002Fguidewire-common-errors\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"errors","guidewire common errors","common","write","when","api errors","with","error","trigger","io","use","edit","diagnose","read","curl","grep","Bash","api","integration","issues","validation","2026-11-10 10:12:30",false,"---\nname: guidewire-common-errors\ndescription: |\n  Diagnose and resolve common Guidewire InsuranceSuite errors.\n  Use when encountering API errors, Gosu exceptions, validation failures,\n  or integration issues in PolicyCenter, ClaimCenter, or BillingCenter.\n  Trigger with phrases like \"guidewire error\", \"policycenter error\",\n  \"claimcenter error\", \"gosu exception\", \"api error 422\".\nallowed-tools: Read, Write, Edit, Bash(curl:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Guidewire Common Errors\n\n## Overview\n\nDiagnose and resolve the most common errors encountered in Guidewire InsuranceSuite Cloud API, Gosu development, and integrations.\n\n## Prerequisites\n\n- Access to Guidewire Cloud Console logs\n- Understanding of HTTP status codes\n- Familiarity with Gosu exception handling\n\n## HTTP Status Code Reference\n\n| Code | Meaning | Common Cause | Resolution |\n|------|---------|--------------|------------|\n| 400 | Bad Request | Malformed JSON, invalid field | Check request body structure |\n| 401 | Unauthorized | Invalid\u002Fexpired token | Refresh OAuth token |\n| 403 | Forbidden | Missing API role | Check role assignments in GCC |\n| 404 | Not Found | Invalid endpoint or ID | Verify URL and resource ID |\n| 409 | Conflict | Concurrent modification | Retry with updated checksum |\n| 422 | Unprocessable | Business rule violation | Fix validation errors |\n| 429 | Too Many Requests | Rate limit exceeded | Implement backoff |\n| 500 | Server Error | Internal error | Check server logs |\n| 503 | Service Unavailable | Maintenance\u002Foverload | Retry with backoff |\n\n## Cloud API Errors\n\n### 401 Authentication Errors\n\n```typescript\n\u002F\u002F Error: \"invalid_token\" or \"expired_token\"\n\u002F\u002F Solution: Implement token refresh\nclass TokenManager {\n  private token: string | null = null;\n  private expiry: Date | null = null;\n\n  async getValidToken(): Promise\u003Cstring> {\n    if (this.isTokenValid()) {\n      return this.token!;\n    }\n\n    try {\n      const response = await this.refreshToken();\n      this.token = response.access_token;\n      \u002F\u002F Set expiry 60 seconds before actual expiry for safety\n      this.expiry = new Date(Date.now() + (response.expires_in - 60) * 1000);\n      return this.token;\n    } catch (error) {\n      console.error('Token refresh failed:', error);\n      throw new AuthenticationError('Unable to obtain valid token');\n    }\n  }\n\n  private isTokenValid(): boolean {\n    return this.token !== null &&\n           this.expiry !== null &&\n           this.expiry > new Date();\n  }\n}\n```\n\n### 403 Permission Errors\n\n```json\n\u002F\u002F Error response\n{\n  \"status\": 403,\n  \"error\": \"Forbidden\",\n  \"message\": \"Caller does not have permission to access endpoint: POST \u002Faccount\u002Fv1\u002Faccounts\",\n  \"details\": {\n    \"requiredRole\": \"pc_account_admin\",\n    \"callerRoles\": [\"pc_policy_read\"]\n  }\n}\n```\n\n**Resolution:**\n1. Log into Guidewire Cloud Console\n2. Navigate to Identity & Access > API Roles\n3. Find your service account\n4. Add the required API role (`pc_account_admin`)\n5. Wait 5 minutes for role propagation\n\n### 409 Conflict (Optimistic Locking)\n\n```typescript\n\u002F\u002F Error: Checksum mismatch indicates concurrent modification\nasync function updateWithRetry\u003CT>(\n  path: string,\n  getData: () => Promise\u003CT>,\n  updateFn: (data: T) => Partial\u003CT>,\n  maxRetries: number = 3\n): Promise\u003CT> {\n  let attempt = 0;\n\n  while (attempt \u003C maxRetries) {\n    try {\n      \u002F\u002F Get current state with checksum\n      const current = await client.request\u003C{ data: T; checksum: string }>('GET', path);\n\n      \u002F\u002F Apply update\n      const updated = {\n        data: {\n          attributes: updateFn(current.data),\n          checksum: current.checksum\n        }\n      };\n\n      return await client.request\u003CT>('PATCH', path, updated);\n    } catch (error) {\n      if (error.response?.status === 409 && attempt \u003C maxRetries - 1) {\n        attempt++;\n        console.log(`Conflict detected, retrying (${attempt}\u002F${maxRetries})`);\n        await sleep(1000 * attempt); \u002F\u002F Exponential backoff\n        continue;\n      }\n      throw error;\n    }\n  }\n\n  throw new Error('Max retries exceeded for optimistic locking conflict');\n}\n```\n\n### 422 Validation Errors\n\n```typescript\n\u002F\u002F Parse and display validation errors\ninterface ValidationErrorResponse {\n  status: 422;\n  error: 'Unprocessable Entity';\n  details: Array\u003C{\n    field: string;\n    message: string;\n    code: string;\n    rejectedValue?: any;\n  }>;\n}\n\nfunction handleValidationError(error: ValidationErrorResponse): never {\n  console.error('Validation Errors:');\n\n  error.details.forEach(detail => {\n    console.error(`  [${detail.code}] ${detail.field}: ${detail.message}`);\n    if (detail.rejectedValue !== undefined) {\n      console.error(`    Rejected value: ${JSON.stringify(detail.rejectedValue)}`);\n    }\n  });\n\n  \u002F\u002F Group by field for form display\n  const fieldErrors = error.details.reduce((acc, detail) => {\n    acc[detail.field] = acc[detail.field] || [];\n    acc[detail.field].push(detail.message);\n    return acc;\n  }, {} as Record\u003Cstring, string[]>);\n\n  throw new ValidationError('Request validation failed', fieldErrors);\n}\n```\n\n**Common Validation Error Codes:**\n\n| Code | Description | Example |\n|------|-------------|---------|\n| `required` | Missing required field | `accountHolder is required` |\n| `invalid_format` | Wrong data format | `dateOfBirth must be ISO date` |\n| `invalid_value` | Value not in allowed set | `state.code 'XX' not valid` |\n| `range_exceeded` | Value outside range | `premium exceeds policy limit` |\n| `duplicate` | Duplicate entity | `Account number already exists` |\n| `reference_not_found` | Invalid foreign key | `producerCode.id not found` |\n\n## Gosu Exceptions\n\n### NullPointerException\n\n```gosu\n\u002F\u002F Bad: Direct property access\nvar account = getAccount()\nprint(account.AccountNumber)  \u002F\u002F NPE if account is null\n\n\u002F\u002F Good: Null-safe access\nvar account = getAccount()\nif (account != null) {\n  print(account.AccountNumber)\n}\n\n\u002F\u002F Better: Elvis operator\nvar accountNumber = account?.AccountNumber ?: \"Unknown\"\n```\n\n### QueryException\n\n```gosu\n\u002F\u002F Bad: Returns multiple rows unexpectedly\nvar account = Query.make(Account)\n  .compare(Account#AccountStatus, Equals, AccountStatus.TC_ACTIVE)\n  .select()\n  .AtMostOneRow  \u002F\u002F Throws if multiple results!\n\n\u002F\u002F Good: Handle multiple results explicitly\nvar accounts = Query.make(Account)\n  .compare(Account#AccountStatus, Equals, AccountStatus.TC_ACTIVE)\n  .select()\n  .toList()\n\nif (accounts.Count > 1) {\n  LOG.warn(\"Multiple active accounts found, using first\")\n}\nvar account = accounts.first()\n```\n\n### TransactionException\n\n```gosu\n\u002F\u002F Error: Entity from different bundle\nfunction badUpdate(policy : Policy) {\n  Transaction.runWithNewBundle(\\bundle -> {\n    \u002F\u002F ERROR: policy is from outside bundle\n    policy.Status = PolicyStatus.TC_INFORCE  \u002F\u002F TransactionException!\n  })\n}\n\n\u002F\u002F Good: Add entity to bundle first\nfunction goodUpdate(policy : Policy) {\n  Transaction.runWithNewBundle(\\bundle -> {\n    var p = bundle.add(policy)  \u002F\u002F Add to new bundle\n    p.Status = PolicyStatus.TC_INFORCE\n  })\n}\n```\n\n### ValidationException\n\n```gosu\n\u002F\u002F Handle validation during commit\ntry {\n  Transaction.runWithNewBundle(\\bundle -> {\n    var submission = createSubmission(bundle)\n    bundle.commit()\n  })\n} catch (e : gw.api.database.ValidationException) {\n  LOG.error(\"Validation failed: ${e.Message}\")\n  e.ValidationResult.Errors.each(\\err -> {\n    LOG.error(\"  ${err.FieldPath}: ${err.Message}\")\n  })\n  throw e\n}\n```\n\n## Integration Errors\n\n### REST API Client Errors\n\n```gosu\n\u002F\u002F Handle external service errors\nuses gw.api.rest.FaultToleranceException\nuses gw.api.rest.CircuitBreakerOpenException\n\nclass IntegrationService {\n  function callExternalService(request : Request) : Response {\n    try {\n      return _client.post(\"\u002Fapi\u002Fresource\", request)\n    } catch (e : CircuitBreakerOpenException) {\n      LOG.warn(\"Circuit breaker open, using fallback\")\n      return getFallbackResponse()\n    } catch (e : FaultToleranceException) {\n      if (e.Cause typeis java.net.SocketTimeoutException) {\n        LOG.error(\"External service timeout\")\n        throw new IntegrationTimeoutException(\"Service timed out\", e)\n      }\n      LOG.error(\"Integration error: ${e.Message}\")\n      throw new IntegrationException(\"External service error\", e)\n    }\n  }\n}\n```\n\n### Message Queue Errors\n\n```gosu\n\u002F\u002F Handle message delivery failures\nuses gw.api.messaging.MessageTransport\n\nclass MessageHandler {\n  function handleDeliveryFailure(message : Message, error : Exception) {\n    var retryCount = message.RetryCount ?: 0\n\n    if (retryCount \u003C 3) {\n      \u002F\u002F Retry with exponential backoff\n      message.RetryCount = retryCount + 1\n      message.ScheduledSendTime = Date.Now.addMinutes(Math.pow(2, retryCount) as int)\n      message.Status = MessageStatus.TC_PENDING\n      LOG.info(\"Scheduling retry ${retryCount + 1} for message ${message.ID}\")\n    } else {\n      \u002F\u002F Move to dead letter queue\n      message.Status = MessageStatus.TC_ERROR\n      LOG.error(\"Message ${message.ID} failed after ${retryCount} retries: ${error.Message}\")\n      notifySupport(message, error)\n    }\n  }\n}\n```\n\n## Database Errors\n\n### Deadlock Detection\n\n```gosu\n\u002F\u002F Handle database deadlocks\nuses java.sql.SQLException\n\nfunction executeWithDeadlockRetry\u003CT>(operation() : T, maxRetries : int = 3) : T {\n  var attempt = 0\n\n  while (true) {\n    try {\n      return operation()\n    } catch (e : SQLException) {\n      if (isDeadlock(e) && attempt \u003C maxRetries) {\n        attempt++\n        LOG.warn(\"Deadlock detected, retry ${attempt}\u002F${maxRetries}\")\n        Thread.sleep(100 * attempt)  \u002F\u002F Brief delay\n        continue\n      }\n      throw e\n    }\n  }\n}\n\nprivate function isDeadlock(e : SQLException) : boolean {\n  \u002F\u002F Oracle: ORA-00060\n  \u002F\u002F SQL Server: 1205\n  \u002F\u002F PostgreSQL: 40P01\n  return e.ErrorCode == 60 ||\n         e.ErrorCode == 1205 ||\n         e.SQLState == \"40P01\"\n}\n```\n\n## Error Response Wrapper\n\n```typescript\n\u002F\u002F Standardized error handling wrapper\ninterface GuidewireError {\n  status: number;\n  code: string;\n  message: string;\n  details?: any;\n  traceId?: string;\n}\n\nclass GuidewireApiError extends Error {\n  constructor(\n    public status: number,\n    public code: string,\n    message: string,\n    public details?: any,\n    public traceId?: string\n  ) {\n    super(message);\n    this.name = 'GuidewireApiError';\n  }\n\n  static fromResponse(response: any): GuidewireApiError {\n    return new GuidewireApiError(\n      response.status,\n      response.error || 'UNKNOWN',\n      response.message || 'An error occurred',\n      response.details,\n      response.headers?.['x-gw-trace-id']\n    );\n  }\n\n  toUserMessage(): string {\n    switch (this.code) {\n      case 'invalid_token': return 'Your session has expired. Please log in again.';\n      case 'forbidden': return 'You do not have permission to perform this action.';\n      case 'not_found': return 'The requested resource was not found.';\n      case 'validation_error': return 'Please correct the errors in your submission.';\n      default: return 'An unexpected error occurred. Please try again.';\n    }\n  }\n}\n```\n\n## Resources\n\n- [Cloud API Error Reference](https:\u002F\u002Fdocs.guidewire.com\u002Fcloud\u002Fpc\u002F202503\u002Fcloudapica\u002F)\n- [Gosu Exception Handling](https:\u002F\u002Fgosu-lang.github.io\u002F)\n- [Integration Troubleshooting](https:\u002F\u002Fdocs.guidewire.com\u002Feducation\u002F)\n\n## Next Steps\n\nFor debugging techniques, see `guidewire-debug-bundle`.\n","# Guidewire Common Errors\n\n## Overview\n\nDiagnose and resolve the most common errors encountered in Guidewire InsuranceSuite Cloud API, Gosu development, and integrations.\n\n## Prerequisites\n\n- Access to Guidewire Cloud Console logs\n- Understanding of HTTP status codes\n- Familiarity with Gosu exception handling\n\n## HTTP Status Code Reference\n\n| Code | Meaning | Common Cause | Resolution |\n|------|---------|--------------|------------|\n| 400 | Bad Request | Malformed JSON, invalid field | Check request body structure |\n| 401 | Unauthorized | Invalid\u002Fexpired token | Refresh OAuth token |\n| 403 | Forbidden | Missing API role | Check role assignments in GCC |\n| 404 | Not Found | Invalid endpoint or ID | Verify URL and resource ID |\n| 409 | Conflict | Concurrent modification | Retry with updated checksum |\n| 422 | Unprocessable | Business rule violation | Fix validation errors |\n| 429 | Too Many Requests | Rate limit exceeded | Implement backoff |\n| 500 | Server Error | Internal error | Check server logs |\n| 503 | Service Unavailable | Maintenance\u002Foverload | Retry with backoff |\n\n## Cloud API Errors\n\n### 401 Authentication Errors\n\n```typescript\n\u002F\u002F Error: \"invalid_token\" or \"expired_token\"\n\u002F\u002F Solution: Implement token refresh\nclass TokenManager {\n  private token: string | null = null;\n  private expiry: Date | null = null;\n\n  async getValidToken(): Promise\u003Cstring> {\n    if (this.isTokenValid()) {\n      return this.token!;\n    }\n\n    try {\n      const response = await this.refreshToken();\n      this.token = response.access_token;\n      \u002F\u002F Set expiry 60 seconds before actual expiry for safety\n      this.expiry = new Date(Date.now() + (response.expires_in - 60) * 1000);\n      return this.token;\n    } catch (error) {\n      console.error('Token refresh failed:', error);\n      throw new AuthenticationError('Unable to obtain valid token');\n    }\n  }\n\n  private isTokenValid(): boolean {\n    return this.token !== null &&\n           this.expiry !== null &&\n           this.expiry > new Date();\n  }\n}\n```\n\n### 403 Permission Errors\n\n```json\n\u002F\u002F Error response\n{\n  \"status\": 403,\n  \"error\": \"Forbidden\",\n  \"message\": \"Caller does not have permission to access endpoint: POST \u002Faccount\u002Fv1\u002Faccounts\",\n  \"details\": {\n    \"requiredRole\": \"pc_account_admin\",\n    \"callerRoles\": [\"pc_policy_read\"]\n  }\n}\n```\n\n**Resolution:**\n1. Log into Guidewire Cloud Console\n2. Navigate to Identity & Access > API Roles\n3. Find your service account\n4. Add the required API role (`pc_account_admin`)\n5. Wait 5 minutes for role propagation\n\n### 409 Conflict (Optimistic Locking)\n\n```typescript\n\u002F\u002F Error: Checksum mismatch indicates concurrent modification\nasync function updateWithRetry\u003CT>(\n  path: string,\n  getData: () => Promise\u003CT>,\n  updateFn: (data: T) => Partial\u003CT>,\n  maxRetries: number = 3\n): Promise\u003CT> {\n  let attempt = 0;\n\n  while (attempt \u003C maxRetries) {\n    try {\n      \u002F\u002F Get current state with checksum\n      const current = await client.request\u003C{ data: T; checksum: string }>('GET', path);\n\n      \u002F\u002F Apply update\n      const updated = {\n        data: {\n          attributes: updateFn(current.data),\n          checksum: current.checksum\n        }\n      };\n\n      return await client.request\u003CT>('PATCH', path, updated);\n    } catch (error) {\n      if (error.response?.status === 409 && attempt \u003C maxRetries - 1) {\n        attempt++;\n        console.log(`Conflict detected, retrying (${attempt}\u002F${maxRetries})`);\n        await sleep(1000 * attempt); \u002F\u002F Exponential backoff\n        continue;\n      }\n      throw error;\n    }\n  }\n\n  throw new Error('Max retries exceeded for optimistic locking conflict');\n}\n```\n\n### 422 Validation Errors\n\n```typescript\n\u002F\u002F Parse and display validation errors\ninterface ValidationErrorResponse {\n  status: 422;\n  error: 'Unprocessable Entity';\n  details: Array\u003C{\n    field: string;\n    message: string;\n    code: string;\n    rejectedValue?: any;\n  }>;\n}\n\nfunction handleValidationError(error: ValidationErrorResponse): never {\n  console.error('Validation Errors:');\n\n  error.details.forEach(detail => {\n    console.error(`  [${detail.code}] ${detail.field}: ${detail.message}`);\n    if (detail.rejectedValue !== undefined) {\n      console.error(`    Rejected value: ${JSON.stringify(detail.rejectedValue)}`);\n    }\n  });\n\n  \u002F\u002F Group by field for form display\n  const fieldErrors = error.details.reduce((acc, detail) => {\n    acc[detail.field] = acc[detail.field] || [];\n    acc[detail.field].push(detail.message);\n    return acc;\n  }, {} as Record\u003Cstring, string[]>);\n\n  throw new ValidationError('Request validation failed', fieldErrors);\n}\n```\n\n**Common Validation Error Codes:**\n\n| Code | Description | Example |\n|------|-------------|---------|\n| `required` | Missing required field | `accountHolder is required` |\n| `invalid_format` | Wrong data format | `dateOfBirth must be ISO date` |\n| `invalid_value` | Value not in allowed set | `state.code 'XX' not valid` |\n| `range_exceeded` | Value outside range | `premium exceeds policy limit` |\n| `duplicate` | Duplicate entity | `Account number already exists` |\n| `reference_not_found` | Invalid foreign key | `producerCode.id not found` |\n\n## Gosu Exceptions\n\n### NullPointerException\n\n```gosu\n\u002F\u002F Bad: Direct property access\nvar account = getAccount()\nprint(account.AccountNumber)  \u002F\u002F NPE if account is null\n\n\u002F\u002F Good: Null-safe access\nvar account = getAccount()\nif (account != null) {\n  print(account.AccountNumber)\n}\n\n\u002F\u002F Better: Elvis operator\nvar accountNumber = account?.AccountNumber ?: \"Unknown\"\n```\n\n### QueryException\n\n```gosu\n\u002F\u002F Bad: Returns multiple rows unexpectedly\nvar account = Query.make(Account)\n  .compare(Account#AccountStatus, Equals, AccountStatus.TC_ACTIVE)\n  .select()\n  .AtMostOneRow  \u002F\u002F Throws if multiple results!\n\n\u002F\u002F Good: Handle multiple results explicitly\nvar accounts = Query.make(Account)\n  .compare(Account#AccountStatus, Equals, AccountStatus.TC_ACTIVE)\n  .select()\n  .toList()\n\nif (accounts.Count > 1) {\n  LOG.warn(\"Multiple active accounts found, using first\")\n}\nvar account = accounts.first()\n```\n\n### TransactionException\n\n```gosu\n\u002F\u002F Error: Entity from different bundle\nfunction badUpdate(policy : Policy) {\n  Transaction.runWithNewBundle(\\bundle -> {\n    \u002F\u002F ERROR: policy is from outside bundle\n    policy.Status = PolicyStatus.TC_INFORCE  \u002F\u002F TransactionException!\n  })\n}\n\n\u002F\u002F Good: Add entity to bundle first\nfunction goodUpdate(policy : Policy) {\n  Transaction.runWithNewBundle(\\bundle -> {\n    var p = bundle.add(policy)  \u002F\u002F Add to new bundle\n    p.Status = PolicyStatus.TC_INFORCE\n  })\n}\n```\n\n### ValidationException\n\n```gosu\n\u002F\u002F Handle validation during commit\ntry {\n  Transaction.runWithNewBundle(\\bundle -> {\n    var submission = createSubmission(bundle)\n    bundle.commit()\n  })\n} catch (e : gw.api.database.ValidationException) {\n  LOG.error(\"Validation failed: ${e.Message}\")\n  e.ValidationResult.Errors.each(\\err -> {\n    LOG.error(\"  ${err.FieldPath}: ${err.Message}\")\n  })\n  throw e\n}\n```\n\n## Integration Errors\n\n### REST API Client Errors\n\n```gosu\n\u002F\u002F Handle external service errors\nuses gw.api.rest.FaultToleranceException\nuses gw.api.rest.CircuitBreakerOpenException\n\nclass IntegrationService {\n  function callExternalService(request : Request) : Response {\n    try {\n      return _client.post(\"\u002Fapi\u002Fresource\", request)\n    } catch (e : CircuitBreakerOpenException) {\n      LOG.warn(\"Circuit breaker open, using fallback\")\n      return getFallbackResponse()\n    } catch (e : FaultToleranceException) {\n      if (e.Cause typeis java.net.SocketTimeoutException) {\n        LOG.error(\"External service timeout\")\n        throw new IntegrationTimeoutException(\"Service timed out\", e)\n      }\n      LOG.error(\"Integration error: ${e.Message}\")\n      throw new IntegrationException(\"External service error\", e)\n    }\n  }\n}\n```\n\n### Message Queue Errors\n\n```gosu\n\u002F\u002F Handle message delivery failures\nuses gw.api.messaging.MessageTransport\n\nclass MessageHandler {\n  function handleDeliveryFailure(message : Message, error : Exception) {\n    var retryCount = message.RetryCount ?: 0\n\n    if (retryCount \u003C 3) {\n      \u002F\u002F Retry with exponential backoff\n      message.RetryCount = retryCount + 1\n      message.ScheduledSendTime = Date.Now.addMinutes(Math.pow(2, retryCount) as int)\n      message.Status = MessageStatus.TC_PENDING\n      LOG.info(\"Scheduling retry ${retryCount + 1} for message ${message.ID}\")\n    } else {\n      \u002F\u002F Move to dead letter queue\n      message.Status = MessageStatus.TC_ERROR\n      LOG.error(\"Message ${message.ID} failed after ${retryCount} retries: ${error.Message}\")\n      notifySupport(message, error)\n    }\n  }\n}\n```\n\n## Database Errors\n\n### Deadlock Detection\n\n```gosu\n\u002F\u002F Handle database deadlocks\nuses java.sql.SQLException\n\nfunction executeWithDeadlockRetry\u003CT>(operation() : T, maxRetries : int = 3) : T {\n  var attempt = 0\n\n  while (true) {\n    try {\n      return operation()\n    } catch (e : SQLException) {\n      if (isDeadlock(e) && attempt \u003C maxRetries) {\n        attempt++\n        LOG.warn(\"Deadlock detected, retry ${attempt}\u002F${maxRetries}\")\n        Thread.sleep(100 * attempt)  \u002F\u002F Brief delay\n        continue\n      }\n      throw e\n    }\n  }\n}\n\nprivate function isDeadlock(e : SQLException) : boolean {\n  \u002F\u002F Oracle: ORA-00060\n  \u002F\u002F SQL Server: 1205\n  \u002F\u002F PostgreSQL: 40P01\n  return e.ErrorCode == 60 ||\n         e.ErrorCode == 1205 ||\n         e.SQLState == \"40P01\"\n}\n```\n\n## Error Response Wrapper\n\n```typescript\n\u002F\u002F Standardized error handling wrapper\ninterface GuidewireError {\n  status: number;\n  code: string;\n  message: string;\n  details?: any;\n  traceId?: string;\n}\n\nclass GuidewireApiError extends Error {\n  constructor(\n    public status: number,\n    public code: string,\n    message: string,\n    public details?: any,\n    public traceId?: string\n  ) {\n    super(message);\n    this.name = 'GuidewireApiError';\n  }\n\n  static fromResponse(response: any): GuidewireApiError {\n    return new GuidewireApiError(\n      response.status,\n      response.error || 'UNKNOWN',\n      response.message || 'An error occurred',\n      response.details,\n      response.headers?.['x-gw-trace-id']\n    );\n  }\n\n  toUserMessage(): string {\n    switch (this.code) {\n      case 'invalid_token': return 'Your session has expired. Please log in again.';\n      case 'forbidden': return 'You do not have permission to perform this action.';\n      case 'not_found': return 'The requested resource was not found.';\n      case 'validation_error': return 'Please correct the errors in your submission.';\n      default: return 'An unexpected error occurred. Please try again.';\n    }\n  }\n}\n```\n\n## Resources\n\n- [Cloud API Error Reference](https:\u002F\u002Fdocs.guidewire.com\u002Fcloud\u002Fpc\u002F202503\u002Fcloudapica\u002F)\n- [Gosu Exception Handling](https:\u002F\u002Fgosu-lang.github.io\u002F)\n- [Integration Troubleshooting](https:\u002F\u002Fdocs.guidewire.com\u002Feducation\u002F)\n\n## Next Steps\n\nFor debugging techniques, see `guidewire-debug-bundle`.\n",{"name":5,"author":55,"license":15,"version":56,"description":57,"allowed-tools":58},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Diagnose and resolve common Guidewire InsuranceSuite errors.\nUse when encountering API errors, Gosu exceptions, validation failures,\nor integration issues in PolicyCenter, ClaimCenter, or BillingCenter.\nTrigger with phrases like \"guidewire error\", \"policycenter error\",\n\"claimcenter error\", \"gosu exception\", \"api error 422\".\n","Read, Write, Edit, Bash(curl:*), Grep","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fguidewire-pack\u002Fskills\u002Fguidewire-common-errors",231,"https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust","https:\u002F\u002Fgithub.com\u002FDicklesworthstone","https:\u002F\u002Fwww.jeffreyemanuel.com\u002F","Building in NY","2026-11-11 01:23:40",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill guidewire-common-errors",{"tool":74,"command":75},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill guidewire-common-errors",{"tool":77,"command":78},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill guidewire-common-errors","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fguidewire-pack\u002Fskills\u002Fguidewire-common-errors\u002FSKILL.md",true,[],[83,121,145,171,198,220],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":87,"licenseFileUrl":88,"sourceHtmlUrl":89,"categories":90,"keywords":94,"publishedAt":50},"01M6FEGPPK0ZTKCCM0R3E3KS33","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Futilities\u002Fweb-artifacts-builder\u002FSKILL.md",[91],{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,39,113,114,115,116,117,118,119,120],"web artifacts builder","web","artifacts","artifacts builder","builder","frontend","css","components","react","component","routing","state management","state","shadcn","file","ui","Tools","Tailwind","html","single-file","simple","ui components","multi","for","jsx","suite",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":87,"licenseFileUrl":125,"sourceHtmlUrl":126,"categories":127,"keywords":132,"publishedAt":50},"01M6FEE9VTK1W4GY21AKREJXRG","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fsecurity\u002Fwebapp-testing\u002FSKILL.md",[128,131],{"categoryNo":129,"categoryName":130,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":92,"categoryName":93,"taxonomyType":21,"taxonomyTypeDesc":22},[133,134,135,100,136,137,96,138,139,140,110,141,142,143,144,35,118],"testing","webapp testing","webapp","screenshots","playwright","debugging","toolkit","browser","logs","applications","behavior","local",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":149,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":50},"01M6FE20F7ZTQBFWKF4MPJ2SBX","neuropixels-analysis","Neuropixels neural recording analysis. Load SpikeGLX\u002FOpenEphys data, preprocess, motion correction, Kilosort4 spike sorting, quality metrics, Allen\u002FIBL curation, AI-assisted visual analysis, for Neuropixels 1.0\u002F2.0 extracellular electrophysiology. Use when working with neural recordings, spike sorting, extracellular electrophysiology, or when the user mentions Neuropixels, SpikeGLX, Open Ephys, Kilosort, quality metrics, or unit curation.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fscientific\u002Fneuropixels-analysis\u002FSKILL.md",[],[153,154,155,156,157,158,159,160,39,161,162,163,164,165,166,167,35,168,169,170,118,33],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":87,"licenseFileUrl":175,"sourceHtmlUrl":176,"categories":177,"keywords":181,"publishedAt":50},"01M6FDP0PDK6F1GGX395C7625Z","skill-creator","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fskill-creator\u002FSKILL.md",[178],{"categoryNo":179,"categoryName":180,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[182,183,184,185,186,187,188,189,190,191,192,193,194,195,35,118,196,33,197],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","integrations","specialized","guide","new skill","existing skill","users","Existing","new",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":202,"sourceHtmlUrl":203,"categories":204,"keywords":206,"publishedAt":50},"01M6FDM8Y7VK7NYG9SM7QPA3PW","notebooklm","Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fproductivity\u002Fnotebooklm\u002FSKILL.md",[205],{"categoryNo":179,"categoryName":180,"taxonomyType":21,"taxonomyTypeDesc":22},[200,207,208,209,210,211,212,140,213,214,39,215,216,217,218,118,219],"google","browser automation","gemini","automation","auth","code","library","management","only","document","query","Citation","source",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":87,"licenseFileUrl":224,"sourceHtmlUrl":225,"categories":226,"keywords":233,"publishedAt":50},"01M6FDHPXE10J3XGTCH5HBHS1M","slack-gif-creator","Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like \"make me a GIF of X doing Y for Slack.\"","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Ftemplates-davila7\u002Fcli-tool\u002Fcomponents\u002Fskills\u002Fenterprise-communication\u002Fslack-gif-creator\u002FSKILL.md",[227,230],{"categoryNo":228,"categoryName":229,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":231,"categoryName":232,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[234,235,236,183,49,111,237,238,188,39,239,195,240,241,242,118,243,33],"slack gif creator","slack","gif","constraints","Animation","me","make","Utilities","concepts","request"]