--- name: autonomous-api-drift-healer description: "Expert guide for autonomous API schema drift detection, OpenAPI / gRPC breaking change monitoring, self-healing SDK adapter generation, and zero-downtime client-server synchronization / Panduan ahli deteksi drift skema API otonom, pemantauan breaking change OpenAPI / gRPC, pembuatan adapter SDK self-healing, dan sinkronisasi client-server tanpa downtime." author: "Roedy Rustam" version: "4.4.2" --- # autonomous-api-drift-healer — vibes-plug Skill [English](#english) | [Bahasa Indonesia](#bahasa-indonesia) --- ## English ### Orchestration & Integration - **Upstream Specs & Contract SSoT**: `api-design-expert`, `spec-driven-development-expert`, `prd-architect` - **Client & SDK Codegen**: `openapi-swagger-codegen-expert`, `typescript-expert`, `tanstack-query-expert` - **Testing & Verification Sandbox**: `e2e-testing-expert`, `ephemeral-wasm-sandbox-executor`, `autonomous-tdd-debugger` - **Debt Auditing & Cleanup**: `zero-tech-debt-auditor`, `anti-slop` - **Lifecycle & Governance**: `zero-to-prod-orchestrator`, `brainstorming`, `session-memory-manager` ### Description Production guide for architecting autonomous API drift detection and self-healing pipelines across microservices and fullstack applications. Continuously analyzes schema differences across OpenAPI 3.1 specifications, gRPC Protocol Buffers, and GraphQL schemas, automatically synthesizing backward-compatible adapter layers, updating frontend Zod schemas, and issuing self-healing pull requests to eliminate client-server desynchronization. ### Trigger Conditions Activate this skill when: - Backend API endpoints or payload schemas are updated and frontend client calls risk desynchronization. - Migrating between major API versions while requiring zero downtime for existing mobile and web clients. - Auditing microservice contracts for breaking changes prior to deployment. - Generating automated backward-compatibility shims when deprecating legacy fields. --- ### Core Concepts & Patterns #### 1. API Drift Classification Taxonomy | Drift Type | Severity | Impact | Self-Healing Strategy | | :--- | :--- | :--- | :--- | | **Field Renaming** | High (Breaking) | Old clients crash on `undefined` property | Synthesize getter shim translating old field name to new name | | **New Required Param** | High (Breaking) | Old client requests rejected with 400 Bad Request | Introduce server-side default fallback in middleware | | **Type Broadening** (e.g. `string` $\to$ `string \| string[]`) | Medium | Downstream callers may fail on single-item assumptions | Synthesize client normalizer normalizing to array | | **Field Addition (Optional)** | Low (Additive) | Non-breaking | Regenerate TypeScript types and Zod schemas automatically | #### 2. Autonomous Schema Drift Detector (TypeScript Implementation) ```typescript export interface SchemaProperty { type: string; required?: boolean; } export interface EndpointContract { path: string; method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'; properties: Record; } export interface DriftReport { breakingChanges: string[]; additiveChanges: string[]; hasDrift: boolean; } export class AutonomousApiDriftHealer { public static compareContracts( baseline: EndpointContract, updated: EndpointContract ): DriftReport { const breakingChanges: string[] = []; const additiveChanges: string[] = []; // Check for removed properties for (const [key, baseProp] of Object.entries(baseline.properties)) { if (!updated.properties[key]) { breakingChanges.push(`Property "${key}" of type "${baseProp.type}" was removed.`); } else if (baseProp.type !== updated.properties[key].type) { breakingChanges.push( `Property "${key}" changed type from "${baseProp.type}" to "${updated.properties[key].type}".` ); } } // Check for newly introduced required properties for (const [key, updatedProp] of Object.entries(updated.properties)) { if (!baseline.properties[key]) { if (updatedProp.required) { breakingChanges.push(`New required property "${key}" was added.`); } else { additiveChanges.push(`New optional property "${key}" added.`); } } } return { breakingChanges, additiveChanges, hasDrift: breakingChanges.length > 0 || additiveChanges.length > 0 }; } public static generateBackwardCompatibleShim( oldField: string, newField: string ): string { return [ `// Auto-generated backward compatibility adapter`, `export function adaptLegacyPayload>(data: T): T & Record {`, ` if (data && typeof data === 'object') {`, ` if (data['${newField}'] !== undefined && data['${oldField}'] === undefined) {`, ` return { ...data, ['${oldField}']: data['${newField}'] };`, ` }`, ` }`, ` return data;`, `}` ].join('\n'); } } ``` #### 3. Continuous Self-Healing Loop ``` [Git Commit: Backend Schema Edit] │ ▼ [Drift Detection Sentinel] ├── Compares Staging OpenAPI against Production Spec └── Generates Drift Classification Report │ Is Breaking? ┌──────┴──────┐ ▼ ▼ (Yes) (No) │ │ │ ▼ │ Update Frontend Types ▼ [Synthesize Compatibility Layer] ├── Inject Middleware Default Mappings ├── Update Zod Client Validation Schemas └── Run E2E Test Suite via Ephemeral Sandbox │ ▼ [Generate Automated Self-Healing PR] ``` --- ### Best Practices 1. **Enforce Contract Verification in CI**: Block merge requests that introduce unannounced breaking schema changes without adapters. 2. **Auto-Generate Compatibility Shims**: When deprecating fields, keep them active for at least one minor release cycle via transformation adapters. 3. **Keep Zod Schemas Synchronized**: Automatically run code generation from OpenAPI specs so frontend types and runtime validators stay in lockstep. 4. **Log Adapter Usage**: Track telemetry on how often legacy adapters are triggered to safely decommission them when usage reaches zero. --- ### Common Pitfalls to Avoid | Anti-Pattern | Operational Risk | Engineering Remedy | | :--- | :--- | :--- | | Deleting an API field without client audit | Instant client crashes on mobile apps where updates are delayed | Mark field `@deprecated` and synthesize compatibility getter | | Silently ignoring unmapped fields | Data loss and corrupted downstream state | Validate payloads strictly using Zod `.strict()` or `.passthrough()` | | Manual manual updating of API types | Drift builds up, leading to painful quarterly migrations | Automate codegen via `openapi-typescript` on every commit | --- #### Runtime Schema Drift Detector & Adapter Coercer (TypeScript) ```typescript export interface FieldMigrationRule { legacyField: string; modernField: string; } export function healPayloadDrift( rawPayload: Record, rules: readonly FieldMigrationRule[] ): { normalized: Record; driftedFields: string[] } { const normalized: Record = { ...rawPayload }; const driftedFields: string[] = []; for (const rule of rules) { if (rule.legacyField in normalized && !(rule.modernField in normalized)) { normalized[rule.modernField] = normalized[rule.legacyField]; delete normalized[rule.legacyField]; driftedFields.push(rule.legacyField); } } return { normalized, driftedFields }; } ``` ### Sovereign Execution, Token Efficiency & Invariants | Dimension | Sovereign Mandate & Deterministic Contract | | :--- | :--- | | **Frontier Model Cascade** | Medium / High (`GPT-5.6 Sol Medium`, `Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Grok 4.7 High Fast`) | | **Availability Fallback** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Zero unhandled missing-model errors) | | **KV-Cache & Token Protocol** | Pin static instructions & schemas at prompt prefix (`kv-cache-prefix-optimizer`); pass surgical `CONTEXT_MAP.md` slices (<250 tokens/call) during Swarm Fan-Out | | **SaaT CLI & MCP Dispatch** | CLI: `vibes skill exec autonomous-api-drift-healer ` / MCP: `vibes_skill_dispatch`, `vibes_ast_query`, `vibes_compile_cache`, `vibes_optimize_budget`, `vibes_verify_gate` | | **NFR & Anti-Slop Invariants** | P99 API Gateway Latency < 85ms, OpenAPI 3.1 / TypeSpec strict schema parity, RFC 9457 Problem Details error contracts, Idempotency-Key enforcement; 100% complete zero-placeholder output verified via `node scripts/check-anti-slop.js --strict` | --- --- ## Bahasa Indonesia ### Integrasi Orkestrasi - **Spesifikasi Hulu & SSoT Kontrak**: `api-design-expert`, `spec-driven-development-expert`, `prd-architect` - **Codegen SDK & Klien**: `openapi-swagger-codegen-expert`, `typescript-expert`, `tanstack-query-expert` - **Sandbox Pengujian & Verifikasi**: `e2e-testing-expert`, `ephemeral-wasm-sandbox-executor`, `autonomous-tdd-debugger` - **Audit Utang Teknis & Pembersihan**: `zero-tech-debt-auditor`, `anti-slop` - **Siklus Hidup & Tata Kelola**: `zero-to-prod-orchestrator`, `brainstorming`, `session-memory-manager` ### Deskripsi Panduan produksi untuk merancang pipeline deteksi drift skema API dan penyembuhan mandiri (*self-healing*) pada aplikasi fullstack dan microservices. Menganalisis perbedaan skema secara berkesinambungan pada spesifikasi OpenAPI 3.1, gRPC Protocol Buffers, dan GraphQL, menghasilkan adapter kompatibilitas mundur (*backward-compatible*), memperbarui skema Zod pada frontend, serta membuat pull request otomatis untuk mencegah desinkronisasi client-server. ### Kondisi Pemicu Aktifkan skill ini ketika: - Endpoint API backend atau skema payload diubah dan panggilan frontend berisiko mengalami desinkronisasi. - Melakukan migrasi antar versi API utama dengan target nol *downtime* pada aplikasi web dan mobile. - Mengaudit kontrak microservices sebelum proses deploy ke produksi. - Menghasilkan shim kompatibilitas mundur saat menghapus atau mengubah nama properti lawas. --- ### Konsep Inti & Pola Praktik #### 1. Klasifikasi Perubahan Skema (*Drift Classification*) - **Perubahan Merusak (*Breaking*)**: Menghapus field yang sudah ada, mengubah tipe data (misal dari string ke number), atau menambahkan parameter wajib (*required*) baru. Solusi: Buat adapter transformasi atau nilai default di middleware. - **Perubahan Tambahan (*Additive*)**: Menambahkan field opsional baru. Solusi: Perbarui tipe TypeScript dan skema Zod secara otomatis. #### 2. Pipeline Penyembuhan Mandiri (*Self-Healing Loop*) 1. **Deteksi Perubahan**: Bandingkan spesifikasi OpenAPI backend terkini dengan skema klien yang ada. 2. **Pembuatan Adapter**: Jika ditemukan penggantian nama field, buat adapter getter untuk menerjemahkan field lama ke field baru. 3. **Pembaruan Tipe Klien**: Jalankan generator tipe TypeScript dan skema validasi runtime Zod. 4. **Verifikasi Pengujian**: Uji integrasi dalam sandbox untuk memastikan klien lama tetap berfungsi. 5. **Pull Request Otomatis**: Buat cabang git dan PR dengan deskripsi perubahan yang jelas. --- ### Praktik Terbaik 1. **Jadikan Pengecekan Kontrak Sebagai Gerbang CI**: Gagalkan proses merge jika terdapat *breaking change* yang belum dilengkapi adapter kompatibilitas. 2. **Pertahankan Field Lawas Selama Masa Transisi**: Jangan langsung menghapus properti; tandai sebagai `@deprecated` dan gunakan adapter minimal selama satu siklus rilis. 3. **Sinkronkan Skema Zod**: Pastikan validator frontend selalu diperbarui langsung dari kontrak OpenAPI. 4. **Pantau Penggunaan Adapter**: Catat metrik penggunaan adapter untuk mengetahui kapan modul lawas aman dihapus sepenuhnya. --- ### Jebakan Umum yang Harus Dihindari | Praktik Buruk | Dampak Buruk | Solusi Rekayasa | | :--- | :--- | :--- | | Menghapus field API tanpa memeriksa versi aplikasi mobile | Aplikasi versi lama langsung crash saat dibuka pengguna | Gunakan adapter kompatibilitas mundur pada middleware | | Mengabaikan properti tambahan secara diam-diam | Terjadi kehilangan data saat payload disimpan kembali | Gunakan validasi eksplisit dengan skema Zod | | Mengetik ulang interface API secara manual di frontend | Terjadi akumulasi desinkronisasi tipe data | Gunakan otomatisasi codegen dari OpenAPI pada setiap commit | ### Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian | Dimensi | Mandat Berdaulat & Kontrak Deterministik | | :--- | :--- | | **Kaskade Model Frontier** | Medium / High (`GPT-5.6 Sol Medium`, `Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Grok 4.7 High Fast`) | | **Invarian Fallback Ketersediaan** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Bebas gagal saat model belum tersedia/kuota penuh) | | **Protokol Hemat Token & KV-Cache** | Kunci instruksi & skema statis di prefix awal (`kv-cache-prefix-optimizer`); kirim potongan `CONTEXT_MAP.md` (<250 token/panggilan) saat Fan-Out | | **Eksekusi SaaT CLI & MCP** | CLI: `vibes skill exec autonomous-api-drift-healer ` / MCP: `vibes_skill_dispatch`, `vibes_ast_query`, `vibes_compile_cache`, `vibes_optimize_budget`, `vibes_verify_gate` | | **Invarian NFR & Anti-Slop** | Latensi P99 API < 85ms, paritas skema ketat OpenAPI 3.1 / TypeSpec, kontrak error RFC 9457 Problem Details, penegakan Idempotency-Key; kode 100% tuntas tanpa placeholder diverifikasi melalui `node scripts/check-anti-slop.js --strict` |