[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F74Z9ERN07R4ZX7CEEAJDY":3,"skill-same:01M6F74Z9ERN07R4ZX7CEEAJDY":83},{"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":51,"linkOnly":52,"markdownContent":53,"markdownBody":54,"frontMatter":55,"refName":60,"commitSha":61,"skillDirectory":62,"forksCount":63,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":66,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M6F74Z9ERN07R4ZX7CEEAJDY","guidewire-debug-bundle",null,"Debug Guidewire InsuranceSuite issues including Gosu code, Cloud API integrations,\nand system performance problems.\nUse when troubleshooting errors, analyzing logs, or diagnosing integration failures.\nTrigger with phrases like \"debug guidewire\", \"troubleshoot policycenter\",\n\"gosu debugging\", \"guidewire logs\", \"trace api call\".","Dicklesworthstone\u002Fpi_agent_rust","Dicklesworthstone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F35050222?v=4","01M6CG26AR942CSVMN1M5E3DSE","Jeff Emanuel","01M6CG26EPP71PSHW1VDS71121",1981,"MIT","https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fguidewire-pack\u002Fskills\u002Fguidewire-debug-bundle\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,50],"debug","guidewire debug bundle","bundle","integrations","when","errors","trigger","io","call","edit","write","read","performance","system","Bash","api","analyzing","logs","issues","code","debugging","troubleshoot","2026-11-10 10:12:30",false,"---\nname: guidewire-debug-bundle\ndescription: |\n  Debug Guidewire InsuranceSuite issues including Gosu code, Cloud API integrations,\n  and system performance problems.\n  Use when troubleshooting errors, analyzing logs, or diagnosing integration failures.\n  Trigger with phrases like \"debug guidewire\", \"troubleshoot policycenter\",\n  \"gosu debugging\", \"guidewire logs\", \"trace api call\".\nallowed-tools: Read, Write, Edit, Bash(curl:*), Bash(grep:*), Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\n---\n\n# Guidewire Debug Bundle\n\n## Overview\n\nComprehensive debugging techniques for Guidewire InsuranceSuite including Gosu debugging, Cloud API tracing, log analysis, and performance profiling.\n\n## Prerequisites\n\n- Access to Guidewire Cloud Console\n- IntelliJ IDEA with Gosu plugin\n- Basic understanding of Java debugging\n- Access to application logs\n\n## Instructions\n\n### Step 1: Enable Debug Logging\n\n```xml\n\u003C!-- config\u002Flogging\u002Flog4j2.xml -->\n\u003CConfiguration status=\"WARN\">\n  \u003CAppenders>\n    \u003CConsole name=\"Console\" target=\"SYSTEM_OUT\">\n      \u003CPatternLayout pattern=\"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n\"\u002F>\n    \u003C\u002FConsole>\n    \u003CRollingFile name=\"DebugFile\" fileName=\"logs\u002Fdebug.log\"\n                 filePattern=\"logs\u002Fdebug-%d{yyyy-MM-dd}-%i.log.gz\">\n      \u003CPatternLayout pattern=\"%d{ISO8601} [%t] %-5level %logger{36} - %msg%n\"\u002F>\n      \u003CPolicies>\n        \u003CSizeBasedTriggeringPolicy size=\"100 MB\"\u002F>\n      \u003C\u002FPolicies>\n    \u003C\u002FRollingFile>\n  \u003C\u002FAppenders>\n\n  \u003CLoggers>\n    \u003C!-- Application logging -->\n    \u003CLogger name=\"gw.custom\" level=\"DEBUG\"\u002F>\n    \u003CLogger name=\"gw.plugin\" level=\"DEBUG\"\u002F>\n\n    \u003C!-- API logging -->\n    \u003CLogger name=\"gw.api.rest\" level=\"DEBUG\"\u002F>\n    \u003CLogger name=\"gw.api.webservice\" level=\"DEBUG\"\u002F>\n\n    \u003C!-- Database query logging -->\n    \u003CLogger name=\"gw.api.database\" level=\"DEBUG\"\u002F>\n    \u003CLogger name=\"org.hibernate.SQL\" level=\"DEBUG\"\u002F>\n\n    \u003C!-- Integration logging -->\n    \u003CLogger name=\"gw.integration\" level=\"DEBUG\"\u002F>\n\n    \u003CRoot level=\"INFO\">\n      \u003CAppenderRef ref=\"Console\"\u002F>\n      \u003CAppenderRef ref=\"DebugFile\"\u002F>\n    \u003C\u002FRoot>\n  \u003C\u002FLoggers>\n\u003C\u002FConfiguration>\n```\n\n### Step 2: Gosu Debugging in IDE\n\n```gosu\n\u002F\u002F Add debug breakpoints and logging\npackage gw.custom.debug\n\nuses gw.api.util.Logger\n\nclass DebugHelper {\n  private static final var LOG = Logger.forCategory(\"DebugHelper\")\n\n  \u002F\u002F Debug method entry\u002Fexit\n  static function trace\u003CT>(methodName : String, block() : T) : T {\n    LOG.debug(\">>> Entering ${methodName}\")\n    var startTime = System.currentTimeMillis()\n    try {\n      var result = block()\n      LOG.debug(\"\u003C\u003C\u003C Exiting ${methodName} (${System.currentTimeMillis() - startTime}ms)\")\n      return result\n    } catch (e : Exception) {\n      LOG.error(\"!!! Exception in ${methodName}: ${e.Message}\", e)\n      throw e\n    }\n  }\n\n  \u002F\u002F Dump entity state\n  static function dumpEntity(entity : KeyableBean) {\n    LOG.debug(\"=== Entity Dump: ${entity.IntrinsicType.Name} ===\")\n    LOG.debug(\"  ID: ${entity.ID}\")\n    LOG.debug(\"  PublicID: ${entity.PublicID}\")\n\n    entity.IntrinsicType.TypeInfo.Properties\n      .where(\\p -> !p.Name.startsWith(\"_\"))\n      .each(\\prop -> {\n        try {\n          var value = prop.Accessor.getValue(entity)\n          LOG.debug(\"  ${prop.Name}: ${value}\")\n        } catch (e : Exception) {\n          LOG.debug(\"  ${prop.Name}: \u003Cerror reading>\")\n        }\n      })\n  }\n\n  \u002F\u002F Debug query execution\n  static function debugQuery\u003CT>(query : Query\u003CT>) : List\u003CT> {\n    LOG.debug(\"Query: ${query.toString()}\")\n    var startTime = System.currentTimeMillis()\n    var results = query.select().toList()\n    var elapsed = System.currentTimeMillis() - startTime\n    LOG.debug(\"Query returned ${results.Count} rows in ${elapsed}ms\")\n    return results\n  }\n}\n```\n\n### Step 3: Remote Debugging Setup\n\n```bash\n# Start server with debug port\nexport JAVA_OPTS=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"\n.\u002Fgradlew runServer\n\n# In IntelliJ: Run > Edit Configurations > Remote JVM Debug\n# Host: localhost\n# Port: 5005\n# Module classpath: your-project\n```\n\n### Step 4: API Request Tracing\n\n```typescript\n\u002F\u002F Add request\u002Fresponse logging\nimport axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosResponse } from 'axios';\n\nfunction createDebugClient(): AxiosInstance {\n  const client = axios.create({\n    baseURL: process.env.POLICYCENTER_URL,\n    timeout: 30000\n  });\n\n  \u002F\u002F Request interceptor\n  client.interceptors.request.use((config: InternalAxiosRequestConfig) => {\n    const requestId = crypto.randomUUID();\n    config.headers['X-Request-ID'] = requestId;\n\n    console.log(`[${requestId}] >>> ${config.method?.toUpperCase()} ${config.url}`);\n    if (config.data) {\n      console.log(`[${requestId}] Request body:`, JSON.stringify(config.data, null, 2));\n    }\n\n    (config as any).metadata = { startTime: Date.now(), requestId };\n    return config;\n  });\n\n  \u002F\u002F Response interceptor\n  client.interceptors.response.use(\n    (response: AxiosResponse) => {\n      const metadata = (response.config as any).metadata;\n      const elapsed = Date.now() - metadata.startTime;\n      const traceId = response.headers['x-gw-trace-id'];\n\n      console.log(`[${metadata.requestId}] \u003C\u003C\u003C ${response.status} (${elapsed}ms) trace=${traceId}`);\n      console.log(`[${metadata.requestId}] Response:`, JSON.stringify(response.data, null, 2));\n\n      return response;\n    },\n    (error) => {\n      const metadata = (error.config as any)?.metadata;\n      console.error(`[${metadata?.requestId}] !!! Error:`, error.response?.data || error.message);\n      throw error;\n    }\n  );\n\n  return client;\n}\n```\n\n### Step 5: Cloud Console Log Analysis\n\n```bash\n# View real-time logs in Guidewire Cloud Console\n# Navigate to: Observability > Logs\n\n# Common log queries (Lucene syntax)\n# Find errors for a specific claim\nclaimNumber:\"CLM-001234\" AND level:ERROR\n\n# Find slow API calls (>5 seconds)\nmessage:\"API call completed\" AND duration:[5000 TO *]\n\n# Find authentication failures\ncategory:\"Authentication\" AND level:WARN\n\n# Find integration errors\ncategory:\"gw.integration*\" AND level:ERROR\n\n# Download logs via API\ncurl -X GET \"https:\u002F\u002Fyour-tenant.cloud.guidewire.com\u002Fapi\u002Fv1\u002Flogs\" \\\n  -H \"Authorization: Bearer ${TOKEN}\" \\\n  -d \"from=2024-01-15T00:00:00Z\" \\\n  -d \"to=2024-01-15T23:59:59Z\" \\\n  -d \"filter=level:ERROR\" \\\n  -o error-logs.json\n```\n\n### Step 6: Database Query Analysis\n\n```gosu\n\u002F\u002F Analyze slow queries\nuses gw.api.database.Query\nuses gw.api.database.QueryPlanExplainer\n\nclass QueryDebugger {\n\n  static function explainQuery\u003CT>(query : Query\u003CT>) : String {\n    var explainer = new QueryPlanExplainer(query)\n    var plan = explainer.explain()\n\n    LOG.debug(\"=== Query Execution Plan ===\")\n    LOG.debug(\"SQL: ${plan.SQL}\")\n    LOG.debug(\"Estimated Rows: ${plan.EstimatedRows}\")\n    LOG.debug(\"Index Used: ${plan.IndexUsed}\")\n    LOG.debug(\"Scan Type: ${plan.ScanType}\")\n\n    if (plan.ScanType == \"FULL_TABLE_SCAN\" && plan.EstimatedRows > 10000) {\n      LOG.warn(\"WARNING: Full table scan on large table!\")\n    }\n\n    return plan.toString()\n  }\n\n  \u002F\u002F Profile query execution\n  static function profileQuery\u003CT>(name : String, query : Query\u003CT>) : List\u003CT> {\n    var startTime = System.nanoTime()\n    var results = query.select().toList()\n    var elapsed = (System.nanoTime() - startTime) \u002F 1_000_000.0\n\n    LOG.info(\"Query '${name}': ${results.Count} rows in ${elapsed}ms\")\n\n    if (elapsed > 1000) {\n      LOG.warn(\"Slow query detected: ${name}\")\n      explainQuery(query)\n    }\n\n    return results\n  }\n}\n```\n\n### Step 7: Memory and Thread Analysis\n\n```gosu\n\u002F\u002F Monitor memory usage\nclass MemoryDebugger {\n  static function logMemoryUsage() {\n    var runtime = Runtime.getRuntime()\n    var totalMB = runtime.totalMemory() \u002F 1024 \u002F 1024\n    var freeMB = runtime.freeMemory() \u002F 1024 \u002F 1024\n    var usedMB = totalMB - freeMB\n    var maxMB = runtime.maxMemory() \u002F 1024 \u002F 1024\n\n    LOG.info(\"Memory: used=${usedMB}MB, free=${freeMB}MB, total=${totalMB}MB, max=${maxMB}MB\")\n\n    if (usedMB > maxMB * 0.9) {\n      LOG.warn(\"HIGH MEMORY USAGE: ${(usedMB * 100.0 \u002F maxMB) as int}%\")\n    }\n  }\n\n  \u002F\u002F Dump thread state\n  static function dumpThreads() {\n    LOG.info(\"=== Thread Dump ===\")\n    Thread.getAllStackTraces().each(\\thread, stack -> {\n      LOG.info(\"Thread: ${thread.Name} [${thread.State}]\")\n      stack.each(\\frame -> {\n        LOG.info(\"  at ${frame}\")\n      })\n    })\n  }\n}\n```\n\n## Debug Support Bundle\n\n```typescript\n\u002F\u002F Collect diagnostic information\ninterface DebugBundle {\n  timestamp: string;\n  environment: string;\n  version: string;\n  systemInfo: any;\n  recentErrors: any[];\n  configSnapshot: any;\n  performanceMetrics: any;\n}\n\nasync function collectDebugBundle(): Promise\u003CDebugBundle> {\n  const bundle: DebugBundle = {\n    timestamp: new Date().toISOString(),\n    environment: process.env.NODE_ENV || 'unknown',\n    version: process.env.APP_VERSION || 'unknown',\n    systemInfo: await getSystemInfo(),\n    recentErrors: await getRecentErrors(100),\n    configSnapshot: getConfigSnapshot(),\n    performanceMetrics: await getPerformanceMetrics()\n  };\n\n  \u002F\u002F Save to file\n  const filename = `debug-bundle-${Date.now()}.json`;\n  await fs.writeFile(filename, JSON.stringify(bundle, null, 2));\n  console.log(`Debug bundle saved to ${filename}`);\n\n  return bundle;\n}\n\nasync function getSystemInfo() {\n  return {\n    nodeVersion: process.version,\n    platform: process.platform,\n    memoryUsage: process.memoryUsage(),\n    uptime: process.uptime(),\n    apiEndpoint: process.env.POLICYCENTER_URL\n  };\n}\n\nasync function getRecentErrors(limit: number) {\n  \u002F\u002F Fetch from logging service or local storage\n  return [];\n}\n```\n\n## Common Debug Scenarios\n\n### Debugging Workflow Failures\n\n```gosu\n\u002F\u002F Add workflow debug hooks\nclass WorkflowDebugger {\n  static function debugWorkflowStep(workflow : Workflow, step : WorkflowStep) {\n    LOG.debug(\"=== Workflow Step Debug ===\")\n    LOG.debug(\"Workflow: ${workflow.Name}\")\n    LOG.debug(\"Step: ${step.Name}\")\n    LOG.debug(\"Status: ${step.Status}\")\n\n    \u002F\u002F Check preconditions\n    step.Preconditions.each(\\precond -> {\n      var result = precond.evaluate(workflow.Context)\n      LOG.debug(\"Precondition '${precond.Name}': ${result}\")\n    })\n\n    \u002F\u002F Check available actions\n    step.AvailableActions.each(\\action -> {\n      LOG.debug(\"Available action: ${action.Name}\")\n    })\n  }\n}\n```\n\n### Debugging Integration Failures\n\n```gosu\n\u002F\u002F Integration debug helper\nclass IntegrationDebugger {\n  static function debugRequest(request : RestRequest) {\n    LOG.debug(\"=== Outbound Request ===\")\n    LOG.debug(\"URL: ${request.URL}\")\n    LOG.debug(\"Method: ${request.Method}\")\n    LOG.debug(\"Headers:\")\n    request.Headers.each(\\name, value -> {\n      \u002F\u002F Mask sensitive headers\n      var displayValue = name.toLowerCase().contains(\"auth\") ? \"***\" : value\n      LOG.debug(\"  ${name}: ${displayValue}\")\n    })\n    LOG.debug(\"Body: ${request.Body}\")\n  }\n\n  static function debugResponse(response : RestResponse) {\n    LOG.debug(\"=== Inbound Response ===\")\n    LOG.debug(\"Status: ${response.StatusCode}\")\n    LOG.debug(\"Headers:\")\n    response.Headers.each(\\name, value -> {\n      LOG.debug(\"  ${name}: ${value}\")\n    })\n    LOG.debug(\"Body: ${response.Body}\")\n  }\n}\n```\n\n## Output\n\n- Debug logs with trace information\n- Query execution plans\n- Memory and thread dumps\n- Complete debug bundle for support\n\n## Resources\n\n- [Guidewire Cloud Console](https:\u002F\u002Fgcc.guidewire.com\u002F)\n- [IntelliJ Debugging Guide](https:\u002F\u002Fwww.jetbrains.com\u002Fhelp\u002Fidea\u002Fdebugging-code.html)\n- [Log4j2 Configuration](https:\u002F\u002Flogging.apache.org\u002Flog4j\u002F2.x\u002Fmanual\u002Fconfiguration.html)\n\n## Next Steps\n\nFor rate limiting information, see `guidewire-rate-limits`.\n","# Guidewire Debug Bundle\n\n## Overview\n\nComprehensive debugging techniques for Guidewire InsuranceSuite including Gosu debugging, Cloud API tracing, log analysis, and performance profiling.\n\n## Prerequisites\n\n- Access to Guidewire Cloud Console\n- IntelliJ IDEA with Gosu plugin\n- Basic understanding of Java debugging\n- Access to application logs\n\n## Instructions\n\n### Step 1: Enable Debug Logging\n\n```xml\n\u003C!-- config\u002Flogging\u002Flog4j2.xml -->\n\u003CConfiguration status=\"WARN\">\n  \u003CAppenders>\n    \u003CConsole name=\"Console\" target=\"SYSTEM_OUT\">\n      \u003CPatternLayout pattern=\"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n\"\u002F>\n    \u003C\u002FConsole>\n    \u003CRollingFile name=\"DebugFile\" fileName=\"logs\u002Fdebug.log\"\n                 filePattern=\"logs\u002Fdebug-%d{yyyy-MM-dd}-%i.log.gz\">\n      \u003CPatternLayout pattern=\"%d{ISO8601} [%t] %-5level %logger{36} - %msg%n\"\u002F>\n      \u003CPolicies>\n        \u003CSizeBasedTriggeringPolicy size=\"100 MB\"\u002F>\n      \u003C\u002FPolicies>\n    \u003C\u002FRollingFile>\n  \u003C\u002FAppenders>\n\n  \u003CLoggers>\n    \u003C!-- Application logging -->\n    \u003CLogger name=\"gw.custom\" level=\"DEBUG\"\u002F>\n    \u003CLogger name=\"gw.plugin\" level=\"DEBUG\"\u002F>\n\n    \u003C!-- API logging -->\n    \u003CLogger name=\"gw.api.rest\" level=\"DEBUG\"\u002F>\n    \u003CLogger name=\"gw.api.webservice\" level=\"DEBUG\"\u002F>\n\n    \u003C!-- Database query logging -->\n    \u003CLogger name=\"gw.api.database\" level=\"DEBUG\"\u002F>\n    \u003CLogger name=\"org.hibernate.SQL\" level=\"DEBUG\"\u002F>\n\n    \u003C!-- Integration logging -->\n    \u003CLogger name=\"gw.integration\" level=\"DEBUG\"\u002F>\n\n    \u003CRoot level=\"INFO\">\n      \u003CAppenderRef ref=\"Console\"\u002F>\n      \u003CAppenderRef ref=\"DebugFile\"\u002F>\n    \u003C\u002FRoot>\n  \u003C\u002FLoggers>\n\u003C\u002FConfiguration>\n```\n\n### Step 2: Gosu Debugging in IDE\n\n```gosu\n\u002F\u002F Add debug breakpoints and logging\npackage gw.custom.debug\n\nuses gw.api.util.Logger\n\nclass DebugHelper {\n  private static final var LOG = Logger.forCategory(\"DebugHelper\")\n\n  \u002F\u002F Debug method entry\u002Fexit\n  static function trace\u003CT>(methodName : String, block() : T) : T {\n    LOG.debug(\">>> Entering ${methodName}\")\n    var startTime = System.currentTimeMillis()\n    try {\n      var result = block()\n      LOG.debug(\"\u003C\u003C\u003C Exiting ${methodName} (${System.currentTimeMillis() - startTime}ms)\")\n      return result\n    } catch (e : Exception) {\n      LOG.error(\"!!! Exception in ${methodName}: ${e.Message}\", e)\n      throw e\n    }\n  }\n\n  \u002F\u002F Dump entity state\n  static function dumpEntity(entity : KeyableBean) {\n    LOG.debug(\"=== Entity Dump: ${entity.IntrinsicType.Name} ===\")\n    LOG.debug(\"  ID: ${entity.ID}\")\n    LOG.debug(\"  PublicID: ${entity.PublicID}\")\n\n    entity.IntrinsicType.TypeInfo.Properties\n      .where(\\p -> !p.Name.startsWith(\"_\"))\n      .each(\\prop -> {\n        try {\n          var value = prop.Accessor.getValue(entity)\n          LOG.debug(\"  ${prop.Name}: ${value}\")\n        } catch (e : Exception) {\n          LOG.debug(\"  ${prop.Name}: \u003Cerror reading>\")\n        }\n      })\n  }\n\n  \u002F\u002F Debug query execution\n  static function debugQuery\u003CT>(query : Query\u003CT>) : List\u003CT> {\n    LOG.debug(\"Query: ${query.toString()}\")\n    var startTime = System.currentTimeMillis()\n    var results = query.select().toList()\n    var elapsed = System.currentTimeMillis() - startTime\n    LOG.debug(\"Query returned ${results.Count} rows in ${elapsed}ms\")\n    return results\n  }\n}\n```\n\n### Step 3: Remote Debugging Setup\n\n```bash\n# Start server with debug port\nexport JAVA_OPTS=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"\n.\u002Fgradlew runServer\n\n# In IntelliJ: Run > Edit Configurations > Remote JVM Debug\n# Host: localhost\n# Port: 5005\n# Module classpath: your-project\n```\n\n### Step 4: API Request Tracing\n\n```typescript\n\u002F\u002F Add request\u002Fresponse logging\nimport axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosResponse } from 'axios';\n\nfunction createDebugClient(): AxiosInstance {\n  const client = axios.create({\n    baseURL: process.env.POLICYCENTER_URL,\n    timeout: 30000\n  });\n\n  \u002F\u002F Request interceptor\n  client.interceptors.request.use((config: InternalAxiosRequestConfig) => {\n    const requestId = crypto.randomUUID();\n    config.headers['X-Request-ID'] = requestId;\n\n    console.log(`[${requestId}] >>> ${config.method?.toUpperCase()} ${config.url}`);\n    if (config.data) {\n      console.log(`[${requestId}] Request body:`, JSON.stringify(config.data, null, 2));\n    }\n\n    (config as any).metadata = { startTime: Date.now(), requestId };\n    return config;\n  });\n\n  \u002F\u002F Response interceptor\n  client.interceptors.response.use(\n    (response: AxiosResponse) => {\n      const metadata = (response.config as any).metadata;\n      const elapsed = Date.now() - metadata.startTime;\n      const traceId = response.headers['x-gw-trace-id'];\n\n      console.log(`[${metadata.requestId}] \u003C\u003C\u003C ${response.status} (${elapsed}ms) trace=${traceId}`);\n      console.log(`[${metadata.requestId}] Response:`, JSON.stringify(response.data, null, 2));\n\n      return response;\n    },\n    (error) => {\n      const metadata = (error.config as any)?.metadata;\n      console.error(`[${metadata?.requestId}] !!! Error:`, error.response?.data || error.message);\n      throw error;\n    }\n  );\n\n  return client;\n}\n```\n\n### Step 5: Cloud Console Log Analysis\n\n```bash\n# View real-time logs in Guidewire Cloud Console\n# Navigate to: Observability > Logs\n\n# Common log queries (Lucene syntax)\n# Find errors for a specific claim\nclaimNumber:\"CLM-001234\" AND level:ERROR\n\n# Find slow API calls (>5 seconds)\nmessage:\"API call completed\" AND duration:[5000 TO *]\n\n# Find authentication failures\ncategory:\"Authentication\" AND level:WARN\n\n# Find integration errors\ncategory:\"gw.integration*\" AND level:ERROR\n\n# Download logs via API\ncurl -X GET \"https:\u002F\u002Fyour-tenant.cloud.guidewire.com\u002Fapi\u002Fv1\u002Flogs\" \\\n  -H \"Authorization: Bearer ${TOKEN}\" \\\n  -d \"from=2024-01-15T00:00:00Z\" \\\n  -d \"to=2024-01-15T23:59:59Z\" \\\n  -d \"filter=level:ERROR\" \\\n  -o error-logs.json\n```\n\n### Step 6: Database Query Analysis\n\n```gosu\n\u002F\u002F Analyze slow queries\nuses gw.api.database.Query\nuses gw.api.database.QueryPlanExplainer\n\nclass QueryDebugger {\n\n  static function explainQuery\u003CT>(query : Query\u003CT>) : String {\n    var explainer = new QueryPlanExplainer(query)\n    var plan = explainer.explain()\n\n    LOG.debug(\"=== Query Execution Plan ===\")\n    LOG.debug(\"SQL: ${plan.SQL}\")\n    LOG.debug(\"Estimated Rows: ${plan.EstimatedRows}\")\n    LOG.debug(\"Index Used: ${plan.IndexUsed}\")\n    LOG.debug(\"Scan Type: ${plan.ScanType}\")\n\n    if (plan.ScanType == \"FULL_TABLE_SCAN\" && plan.EstimatedRows > 10000) {\n      LOG.warn(\"WARNING: Full table scan on large table!\")\n    }\n\n    return plan.toString()\n  }\n\n  \u002F\u002F Profile query execution\n  static function profileQuery\u003CT>(name : String, query : Query\u003CT>) : List\u003CT> {\n    var startTime = System.nanoTime()\n    var results = query.select().toList()\n    var elapsed = (System.nanoTime() - startTime) \u002F 1_000_000.0\n\n    LOG.info(\"Query '${name}': ${results.Count} rows in ${elapsed}ms\")\n\n    if (elapsed > 1000) {\n      LOG.warn(\"Slow query detected: ${name}\")\n      explainQuery(query)\n    }\n\n    return results\n  }\n}\n```\n\n### Step 7: Memory and Thread Analysis\n\n```gosu\n\u002F\u002F Monitor memory usage\nclass MemoryDebugger {\n  static function logMemoryUsage() {\n    var runtime = Runtime.getRuntime()\n    var totalMB = runtime.totalMemory() \u002F 1024 \u002F 1024\n    var freeMB = runtime.freeMemory() \u002F 1024 \u002F 1024\n    var usedMB = totalMB - freeMB\n    var maxMB = runtime.maxMemory() \u002F 1024 \u002F 1024\n\n    LOG.info(\"Memory: used=${usedMB}MB, free=${freeMB}MB, total=${totalMB}MB, max=${maxMB}MB\")\n\n    if (usedMB > maxMB * 0.9) {\n      LOG.warn(\"HIGH MEMORY USAGE: ${(usedMB * 100.0 \u002F maxMB) as int}%\")\n    }\n  }\n\n  \u002F\u002F Dump thread state\n  static function dumpThreads() {\n    LOG.info(\"=== Thread Dump ===\")\n    Thread.getAllStackTraces().each(\\thread, stack -> {\n      LOG.info(\"Thread: ${thread.Name} [${thread.State}]\")\n      stack.each(\\frame -> {\n        LOG.info(\"  at ${frame}\")\n      })\n    })\n  }\n}\n```\n\n## Debug Support Bundle\n\n```typescript\n\u002F\u002F Collect diagnostic information\ninterface DebugBundle {\n  timestamp: string;\n  environment: string;\n  version: string;\n  systemInfo: any;\n  recentErrors: any[];\n  configSnapshot: any;\n  performanceMetrics: any;\n}\n\nasync function collectDebugBundle(): Promise\u003CDebugBundle> {\n  const bundle: DebugBundle = {\n    timestamp: new Date().toISOString(),\n    environment: process.env.NODE_ENV || 'unknown',\n    version: process.env.APP_VERSION || 'unknown',\n    systemInfo: await getSystemInfo(),\n    recentErrors: await getRecentErrors(100),\n    configSnapshot: getConfigSnapshot(),\n    performanceMetrics: await getPerformanceMetrics()\n  };\n\n  \u002F\u002F Save to file\n  const filename = `debug-bundle-${Date.now()}.json`;\n  await fs.writeFile(filename, JSON.stringify(bundle, null, 2));\n  console.log(`Debug bundle saved to ${filename}`);\n\n  return bundle;\n}\n\nasync function getSystemInfo() {\n  return {\n    nodeVersion: process.version,\n    platform: process.platform,\n    memoryUsage: process.memoryUsage(),\n    uptime: process.uptime(),\n    apiEndpoint: process.env.POLICYCENTER_URL\n  };\n}\n\nasync function getRecentErrors(limit: number) {\n  \u002F\u002F Fetch from logging service or local storage\n  return [];\n}\n```\n\n## Common Debug Scenarios\n\n### Debugging Workflow Failures\n\n```gosu\n\u002F\u002F Add workflow debug hooks\nclass WorkflowDebugger {\n  static function debugWorkflowStep(workflow : Workflow, step : WorkflowStep) {\n    LOG.debug(\"=== Workflow Step Debug ===\")\n    LOG.debug(\"Workflow: ${workflow.Name}\")\n    LOG.debug(\"Step: ${step.Name}\")\n    LOG.debug(\"Status: ${step.Status}\")\n\n    \u002F\u002F Check preconditions\n    step.Preconditions.each(\\precond -> {\n      var result = precond.evaluate(workflow.Context)\n      LOG.debug(\"Precondition '${precond.Name}': ${result}\")\n    })\n\n    \u002F\u002F Check available actions\n    step.AvailableActions.each(\\action -> {\n      LOG.debug(\"Available action: ${action.Name}\")\n    })\n  }\n}\n```\n\n### Debugging Integration Failures\n\n```gosu\n\u002F\u002F Integration debug helper\nclass IntegrationDebugger {\n  static function debugRequest(request : RestRequest) {\n    LOG.debug(\"=== Outbound Request ===\")\n    LOG.debug(\"URL: ${request.URL}\")\n    LOG.debug(\"Method: ${request.Method}\")\n    LOG.debug(\"Headers:\")\n    request.Headers.each(\\name, value -> {\n      \u002F\u002F Mask sensitive headers\n      var displayValue = name.toLowerCase().contains(\"auth\") ? \"***\" : value\n      LOG.debug(\"  ${name}: ${displayValue}\")\n    })\n    LOG.debug(\"Body: ${request.Body}\")\n  }\n\n  static function debugResponse(response : RestResponse) {\n    LOG.debug(\"=== Inbound Response ===\")\n    LOG.debug(\"Status: ${response.StatusCode}\")\n    LOG.debug(\"Headers:\")\n    response.Headers.each(\\name, value -> {\n      LOG.debug(\"  ${name}: ${value}\")\n    })\n    LOG.debug(\"Body: ${response.Body}\")\n  }\n}\n```\n\n## Output\n\n- Debug logs with trace information\n- Query execution plans\n- Memory and thread dumps\n- Complete debug bundle for support\n\n## Resources\n\n- [Guidewire Cloud Console](https:\u002F\u002Fgcc.guidewire.com\u002F)\n- [IntelliJ Debugging Guide](https:\u002F\u002Fwww.jetbrains.com\u002Fhelp\u002Fidea\u002Fdebugging-code.html)\n- [Log4j2 Configuration](https:\u002F\u002Flogging.apache.org\u002Flog4j\u002F2.x\u002Fmanual\u002Fconfiguration.html)\n\n## Next Steps\n\nFor rate limiting information, see `guidewire-rate-limits`.\n",{"name":5,"author":56,"license":15,"version":57,"description":58,"allowed-tools":59},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Debug Guidewire InsuranceSuite issues including Gosu code, Cloud API integrations,\nand system performance problems.\nUse when troubleshooting errors, analyzing logs, or diagnosing integration failures.\nTrigger with phrases like \"debug guidewire\", \"troubleshoot policycenter\",\n\"gosu debugging\", \"guidewire logs\", \"trace api call\".\n","Read, Write, Edit, Bash(curl:*), Bash(grep:*), Grep","main","90b50ed0778745a80fd5bfb13b1843d45b9e82f7","tests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fguidewire-pack\u002Fskills\u002Fguidewire-debug-bundle",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-12 03:15:57",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add Dicklesworthstone\u002Fpi_agent_rust --skill guidewire-debug-bundle",{"tool":75,"command":76},"bunx","bunx skills add Dicklesworthstone\u002Fpi_agent_rust --skill guidewire-debug-bundle",{"tool":78,"command":79},"pnpm","pnpm dlx skills add Dicklesworthstone\u002Fpi_agent_rust --skill guidewire-debug-bundle","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDicklesworthstone\u002Fpi_agent_rust\u002Fblob\u002Fmain\u002Ftests\u002Fext_conformance\u002Fartifacts\u002Fplugins-community\u002Fplugins\u002Fsaas-packs\u002Fguidewire-pack\u002Fskills\u002Fguidewire-debug-bundle\u002FSKILL.md",true,[],[84,123,146,172,198,219],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":89,"sourceHtmlUrl":90,"categories":91,"keywords":95,"publishedAt":51},"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",[92],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122],"web artifacts builder","web","artifacts","artifacts builder","builder","frontend","css","components","react","component","routing","state management","state","shadcn","file","ui","Tools","Tailwind","use","html","single-file","simple","ui components","multi","for","jsx","suite",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":127,"sourceHtmlUrl":128,"categories":129,"keywords":134,"publishedAt":51},"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",[130,133],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},[135,136,137,101,138,139,97,49,140,141,111,46,142,143,144,145,120],"testing","webapp testing","webapp","screenshots","playwright","toolkit","browser","applications","behavior","local","with",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":150,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":51},"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",[],[154,155,156,157,158,159,160,161,114,162,163,164,165,166,167,168,145,169,170,171,120,33],"analysis","neuropixels analysis","spike","metrics","data","open","quality","user","recordings","Neural","motion","visual","quality metrics","unit","sorting","curation","recording","load",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":176,"sourceHtmlUrl":177,"categories":178,"keywords":182,"publishedAt":51},"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",[179],{"categoryNo":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[183,184,185,186,187,188,189,190,32,191,192,193,194,195,145,120,196,33,197],"skill creator","creator","workflows","create","update","capabilities","knowledge","tool","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":51},"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":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},[200,207,208,209,210,211,48,141,212,213,114,214,215,216,217,120,218],"google","browser automation","gemini","automation","auth","library","management","only","document","query","Citation","source",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":223,"sourceHtmlUrl":224,"categories":225,"keywords":232,"publishedAt":51},"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",[226,229],{"categoryNo":227,"categoryName":228,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",{"categoryNo":230,"categoryName":231,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[233,234,235,184,236,112,237,238,189,114,239,195,240,241,242,120,243,33],"slack gif creator","slack","gif","validation","constraints","Animation","me","make","Utilities","concepts","request"]