Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Operate a Guidewire Cloud API integration in production — define SLIs/SLOs for token availability, bind success rate, FNOL p99 latency; route alerts so the on-call gets paged for real outages and never for transient noise; triage 401 spikes, 409 storms, 429 saturation, scope drift, and Gosu OOM cascades from signal to recovery in 15 minutes or less. Use when designing a dashboard for a new integration, writing the on-call runbook, or running a post-incident review. Trigger with "guidewire observ
.claude/skills/jeremylongshore-guidewire-observability-and-incident-response/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 149% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 101% | 0% |
Run a production Guidewire Cloud API integration with the dashboards, alerts, and runbooks an on-call engineer can act on at 3am. This skill consolidates the operational layer: what to measure, what to alert on, how to triage the top five incident classes, and how to close the loop with a post-incident review that prevents recurrence rather than performing root-cause theater.
Five operational failures this skill prevents:
5xx pages someone; in three weeks the team mutes the channel; a real incident two weeks later goes unnoticed for an hour.integration_audit table from guidewire-security-and-rbac populated — incident triage depends on knowing what the integration tried to docorrelation_id propagated end-to-end through every Cloud API callBuild the operational layer in this order. Each step targets one of the five operational failures listed in Overview.
Track what users care about, not what is easy to measure. For a Guidewire integration, the SLIs that matter:
| SLI | Measurement | Target | |---|---|---| | Token-endpoint availability | success rate of /oauth/token over a rolling 5min window | ≥99.9% | | Cloud API write success | 2xx rate on POST/PATCH calls, excluding 4xx caller errors | ≥99.5% | | Bind success rate | bound / quoted ratio over rolling 1h, excluding referrals | ≥98% | | FNOL intake p99 latency | end-to-end time from inbound event to claim.created log | ≤2s | | Quote-to-bind median latency | median time from quote-call to bind-success | ≤30s |
5xx from upstream Cloud API counts against availability; 4xx from caller bugs (validation failures, scope mismatches) does not — those are caller errors, not integration outages. Distinguishing the two is the single biggest cause of either alert fatigue or missed incidents, depending on which way the bias goes.
Alerting on "error rate > 1%" pages the on-call every time a transient 502 happens. Alert on SLO burn rate instead — the rate at which the error budget is being consumed.
Fast burn: 2% error budget consumed in 1 hour → page immediately
Slow burn: 5% error budget consumed in 6 hours → page during business hours
Trickle: 10% error budget consumed in 3 days → ticket, not pageA 5-minute outage that consumes 1% of the monthly budget should not page; a 20-minute outage that consumes 4% should. Burn-rate alerts encode this naturally.
Each tree is the ~5-step decision sequence on-call follows from signal to recovery. Memorize the entry signal; the body is in the runbook.
T1: 401 spike on Cloud API calls
401s > 1% for 5min
├─ Check token age in cache: is the integration refreshing? → if no, restart token-cache process
├─ Decode a recent token, verify exp > now + 60s → if no, clock skew or aggressive proxy caching
├─ Check GCC: is the Service Application enabled? → if no, talk to tenant admin
└─ Check secret-rotation history: was a secret rotated in the last 24h? → if yes, run dual-secret swap or restartT2: 409 storm on PATCH calls
409s > 5% for 5min
├─ Are concurrent writers expected? → if yes, scale checksum round-trip retry budget
├─ Is one resource-id producing all 409s? → if yes, it's a hot key; coordinate writes via queue
└─ Is the client retrying the bare PATCH instead of the GET-PATCH cycle? → fix the retry layerT3: 429 saturation on Cloud API or Hub
429s > 1% for 10min
├─ Is the Hub /oauth/token endpoint 429ing? → token cache missing single-flight gate; deploy fix immediately
├─ Is the data-plane API 429ing? → check tenant quota in GCC, request increase if legitimate growth
└─ Is one customer driving the saturation? → tenant-side rate limit on the integration's intakeT4: Scope drift detected
Scope-drift alert from auth refresh
├─ What scope is missing? → check GCC > Identity & Access > Applications > [app] > Permissions
├─ Was a permission removed by a tenant admin? → coordinate; restore or accept loss of capability
└─ Was a scope renamed in a tenant config push? → update GW_SCOPES env, redeployT5: GUnit / runServer OOM (dev or staging)
OOMKilled or heap dump generated
├─ Is sample data set abnormally large? → reset dev DB, reload fixtures
├─ Is a recent change loading too many entities (no pagination, no filter)? → revert; add limit
└─ Is the JVM under-provisioned? → bump -Xmx in gradle.properties; restartEach playbook is one page in the on-call runbook. Concrete commands, not prose.
markdown## Playbook: 401 spike — secret rotation suspected 1. Rotate in GCC > Identity & Access > Applications > [app] > Generate Secret 2. sops secrets.prod.<tenant>.sops.yaml # set new GW_CLIENT_SECRET (and SECONDARY = old) 3. git commit -m "rotate(secrets): incident-driven rotation $(date -Iseconds)" 4. Trigger deploy of token service 5. Confirm token claims show iat > rotation timestamp: kubectl exec ... -- /token-debug 6. After 24h zero failures from primary: remove SECONDARY 7. Open audit row with reason="incident-401-spike"
Each playbook ends with an audit-row insert so the next post-incident review has the full timeline.
markdown# PIR: <date> — <one-line summary> ## Timeline - HH:MM — first signal (alert link, dashboard screenshot) - HH:MM — on-call paged - HH:MM — root cause identified - HH:MM — mitigation applied - HH:MM — confirmation of recovery ## SLO impact - Error budget consumed: X% - Customer-impacting requests: N - Compliance impact: <yes / no — if yes, NAIC notification window> ## Root cause <the actual root cause, not a symptom; use 5-whys but don't perform; one paragraph max> ## What worked <what the team did right; preserve these> ## What didn't <what slowed the response; this drives action items> ## Action items (each with owner + target date) - [ ] OWNER, BY: <date> — <concrete change> - [ ] OWNER, BY: <date> — <concrete change> ## Recurrence prevention <the one change that makes this exact incident impossible next time, not "be more careful">
The discipline is the action items having owners and dates. PIRs without those are theater.
A production-grade observability layer ships with all of the following:
text# error_budget = 0.5%/month = ~3.6h/month # fast-burn: 2% budget in 1h → page sum:trace.http_request.errors{service:guidewire-integration}.as_count() / sum:trace.http_request.hits{service:guidewire-integration}.as_count() > 0.144 # 14.4x normal
sql-- "What was the integration trying to do during the 401 spike?" SELECT correlation_id, actor, api_method, api_path, status_code, reason, at FROM integration_audit WHERE at BETWEEN '2026-04-15T03:00:00Z' AND '2026-04-15T03:30:00Z' AND status_code = 401 ORDER BY at;
yaml# Alert config title: "GW Cloud API 401 spike" runbook: https://github.com/acme/guidewire-integration/blob/main/runbooks/401-spike.md priority: P1 escalation: "platform-oncall"
The on-call clicks the runbook link from the page; the runbook is in the repo so it versions with the code; updates land in PRs reviewed like any other change.
| Symptom | First check | Likely cause | |---|---|---| | 401 spike on Cloud API | token cache age | reactive refresh, clock skew, secret rotation in flight | | 409 storm on PATCH | concurrent writers + retry pattern | client retrying bare PATCH instead of GET-then-PATCH | | 429 on /oauth/token | single-flight gate active? | thundering herd refresh from a stampede on token expiry | | 429 on data-plane API | per-tenant quota | another integration sharing the tenant quota; growth past quota | | 403 Forbidden despite valid token | scope-drift gate | tenant admin removed a permission | | PKIX path building failed | cert chain in JVM trust store | private-CA cert renewal not propagated | | Gosu OOM in production | recent deploy + heap dump | unbounded entity load (missing filter or pagination) | | FNOL p99 latency spike | upstream lookup latency | external policy-resolution service degraded | | Bind success rate drops below SLO | UW-issue volume + product mix | new product or new broker producing high-referral volume; not an outage | | Audit table empty for an outage window | audit insert path failing | check the audit-write retry budget; never let audit failures block the request |
For deeper coverage (RED method vs USE method tradeoffs, multi-tenant dashboard partitioning, synthetic FNOL probes, chaos-engineering tests for token-cache resilience), see implementation guide and API reference.
guidewire-install-auth — produces the auth-side signals this skill alerts on (token cache, scope drift)guidewire-sdk-patterns — the structured GwError and 409 retry semantics this skill's triage trees assumeguidewire-security-and-rbac — the integration_audit table this skill queries during incidentsguidewire-ci-cd-pipeline — the deployment surface incident response interacts with (rollback, canary)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | pass→pass | 22,226 | 18,988 | -15% | 1 | 1 | 0% | 2,953 | 6,248 | +112% | 0 | 0 | — |
case-01 | fail→pass | 27,154 | 73,708 | +171% | 1 | 1 | 0% | 3,857 | 9,610 | +149% | 0 | 0 | — |
case-02 | fail→pass | 44,458 | 39,553 | -11% | 1 | 1 | 0% | 7,184 | 8,916 | +24% | 0 | 0 | — |
case-03 | fail→fail | 23,005 | 45,718 | +99% | 1 | 1 | 0% | 3,723 | 7,921 | +113% | 0 | 0 | — |
case-05 | fail→pass | 17,881 | 11,694 | -35% | 1 | 1 | 0% | 2,788 | 4,163 | +49% | 0 | 0 | — |
case-06 | fail→pass | 15,992 | 7,921 | -50% | 1 | 1 | 0% | 2,446 | 3,542 | +45% | 0 | 0 | — |
case-07 | fail→fail | 26,370 | 22,953 | -13% | 1 | 1 | 0% | 3,201 | 6,376 | +99% | 0 | 0 | — |
case-08 | fail→fail | 21,977 | 21,675 | -1% | 1 | 1 | 0% | 2,706 | 5,845 | +116% | 0 | 0 | — |
case-09 | pass→pass | 25,087 | 17,228 | -31% | 1 | 1 | 0% | 3,221 | 6,107 | +90% | 0 | 0 | — |
case-10 | pass→pass | 22,855 | 22,115 | -3% | 1 | 1 | 0% | 3,106 | 5,985 | +93% | 0 | 0 | — |
case-11 | fail→pass | 20,405 | 12,448 | -39% | 1 | 1 | 0% | 2,549 | 5,111 | +101% | 0 | 0 | — |
case-12 | fail→fail | 24,138 | 23,489 | -3% | 1 | 1 | 0% | 3,087 | 6,036 | +96% | 0 | 0 | — |
case-13 | fail→fail | 25,501 | 19,240 | -25% | 1 | 1 | 0% | 3,236 | 5,433 | +68% | 0 | 0 | — |
case-14 | fail→pass | 14,743 | 11,700 | -21% | 1 | 1 | 0% | 1,692 | 4,189 | +148% | 0 | 0 | — |
case-15 | fail→fail | 21,246 | 12,358 | -42% | 1 | 1 | 0% | 2,925 | 5,409 | +85% | 0 | 0 | — |
case-16 | pass→pass | 20,333 | 5,738 | -72% | 1 | 1 | 0% | 2,451 | 4,008 | +64% | 0 | 0 | — |
case-17 | fail→fail | 22,733 | 15,415 | -32% | 1 | 1 | 0% | 2,838 | 5,576 | +96% | 0 | 0 | — |
case-18 | pass→pass | 14,848 | 15,286 | +3% | 1 | 1 | 0% | 2,205 | 4,622 | +110% | 0 | 0 | — |
case-19 | fail→fail | 24,052 | 15,740 | -35% | 1 | 1 | 0% | 2,584 | 4,827 | +87% | 0 | 0 | — |
case-20 | pass→pass | 22,129 | 14,127 | -36% | 1 | 1 | 0% | 2,992 | 5,728 | +91% | 0 | 0 | — |
case-21 | pass→pass | 24,037 | 32,038 | +33% | 1 | 1 | 0% | 3,845 | 7,246 | +88% | 0 | 0 | — |
case-22 | pass→pass | 21,868 | 26,203 | +20% | 1 | 1 | 0% | 4,081 | 7,074 | +73% | 0 | 0 | — |
case-23 | fail→pass | 16,366 | 11,527 | -30% | 1 | 1 | 0% | 2,780 | 4,881 | +76% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +30 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.