lucidchart-prod-checklist
Prod Checklist for Lucidchart. Trigger: "lucidchart prod checklist".
What this skill does
# Lucidchart Production Checklist
## Overview
Lucidchart integrations interact with collaborative diagrams that may be actively edited by multiple users simultaneously. A production deployment must handle OAuth2 token lifecycle management, respect document-level collaboration locks, and account for export throttling on large diagrams. Failing to version API headers correctly causes silent schema drift, while unbounded export requests can exhaust memory on complex documents. This checklist ensures your Lucidchart integration is resilient to these collaboration and export edge cases.
## Prerequisites
- OAuth2 client credentials registered in Lucid developer portal (production app)
- Secrets manager configured (Vault, AWS Secrets Manager, or GCP Secret Manager)
- Monitoring stack operational (Datadog, Grafana, or CloudWatch)
- Test workspace with sample diagrams covering all export formats (PNG, PDF, SVG)
## Authentication & Secrets
- [ ] OAuth2 client ID and secret stored in vault/secrets manager (never in code)
- [ ] Token rotation implemented with refresh token flow (access tokens expire in 60 min)
- [ ] Refresh tokens stored encrypted at rest, separate from client credentials
- [ ] Token refresh logic handles concurrent requests (mutex/lock to prevent duplicate refreshes)
- [ ] Scopes restricted to minimum required (`lucidchart.document.read`, `lucidchart.document.export`)
## API Integration
- [ ] Base URL points to `https://api.lucid.co/v1` (production endpoint)
- [ ] `Lucid-Api-Version` header set explicitly on every request (pin to tested version)
- [ ] Rate limiting enforced client-side with token bucket (respect `X-RateLimit-*` headers)
- [ ] Pagination implemented for document listing (cursor-based with `pageToken`)
- [ ] Export requests set `Accept` header matching desired format (image/png, application/pdf)
- [ ] Large document exports use async polling pattern (POST export, poll status, GET result)
- [ ] Request timeout set to 15 seconds for reads, 120 seconds for diagram exports
## Error Handling & Resilience
- [ ] Circuit breaker configured for Lucidchart API calls (open after 5 consecutive failures)
- [ ] Retry logic with exponential backoff for 429 (rate limit) and 5xx responses
- [ ] 409 Conflict responses handled for concurrent document edits (retry with latest version)
- [ ] OAuth2 401 responses trigger automatic token refresh before retry (once per request)
- [ ] Export timeout errors fall back to lower-resolution export or cached version
- [ ] Document collaboration lock detection: skip or queue writes when another user holds the lock
- [ ] Out-of-memory protection: cap export resolution for diagrams exceeding 500 objects
## Monitoring & Alerting
- [ ] API latency tracked (p50, p95, p99) with 2s p95 threshold for exports
- [ ] Error rate alerts configured (threshold: >1% over 5-minute window)
- [ ] OAuth2 token refresh failure rate monitored (alert on any failure)
- [ ] Export queue depth tracked (alert if >50 pending exports)
- [ ] API version deprecation warnings logged from response headers
- [ ] Collaboration lock contention rate measured per workspace
## Security
- [ ] OAuth2 redirect URI restricted to exact production callback URL (no wildcards)
- [ ] PKCE enforced for authorization code flow
- [ ] Exported diagram files scanned for embedded sensitive data before downstream storage
- [ ] API responses validated against expected schema before processing
- [ ] Access tokens never logged or included in error reports
## Validation Script
```typescript
async function validateLucidchartProduction(accessToken: string): Promise<void> {
const base = 'https://api.lucid.co/v1';
const headers = {
Authorization: `Bearer ${accessToken}`,
'Lucid-Api-Version': '2024-10-01',
'Content-Type': 'application/json',
};
// 1. Connectivity and auth check
const me = await fetch(`${base}/users/me`, { headers, signal: AbortSignal.timeout(5000) });
console.assert(me.ok, `Auth failed: ${me.status}`);
// 2. Token expiry headroom
const tokenData = await me.json();
console.assert(tokenData.id, 'User profile missing — token may be scoped incorrectly');
// 3. Rate limit headroom
const remaining = parseInt(me.headers.get('X-RateLimit-Remaining') ?? '0');
console.assert(remaining > 10, `Rate limit headroom low: ${remaining} remaining`);
// 4. Document listing works
const docs = await fetch(`${base}/documents?limit=1`, { headers });
console.assert(docs.ok, `Document listing failed: ${docs.status}`);
// 5. API version accepted
const apiVersion = me.headers.get('Lucid-Api-Version');
console.assert(apiVersion, 'API version header missing from response — check version pinning');
console.log('All Lucidchart production checks passed');
}
```
## Risk Matrix
| Check | Risk if Skipped | Priority |
|---|---|---|
| OAuth2 token refresh mutex | Duplicate refresh calls invalidate tokens, cascading 401s | Critical |
| API version header pinning | Silent schema drift breaks document parsing | Critical |
| Collaboration lock detection | Overwrites concurrent user edits, data corruption | Critical |
| Export async polling | Timeout on large diagrams, missing deliverables | High |
| Export memory cap | OOM crash on complex diagrams (500+ objects) | High |
## Resources
- [Lucid Developer Reference](https://developer.lucid.co/reference/overview)
## Next Steps
See `lucidchart-security-basics`.
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.