基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/aibot88/sec_skill_store --skill rpc-contract命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Guides the creation of agile user stories and Gherkin feature files. Use when the user wants to create a user story, write acceptance criteria, define Gherkin scenarios, or author BDD feature files. This should trigger for requests such as Create a user story; Write a user story; I need to write a user story. Part of cursor-rules-java project
Guía técnica completa para integrar 250+ servicios externos con agentes IA usando Composio. Cubre instalación, autenticación OAuth, gestión de herramientas, triggers y flujos multi-servicio.
Facilitates conversational discovery to create Architectural Decision Records (ADRs) for non-functional requirements using the ISO/IEC 25010:2023 quality model. Use when the user wants to document quality attributes, NFR decisions, security/performance/scalability architecture, or design systems with measurable quality criteria. This should trigger for requests such as Create ADR for Non-functional requirements; Document Non-functional requirements; Capture Non-functional requirements; Generate Non-functional requirements in an ADR. Part of cursor-rules-java project
| name | rpc-contract |
| description | RPC contract validation — Contract-first development, direkt REST bypass yasak |
| version | 1.0.0 |
| session | dev |
ANADİL: TÜRKÇE
Bu skill SADECE dev session'da aktif olur.
// ❌ Direkt INSERT/UPDATE/DELETE/PATCH — YASAK!
await supabase.from('tohumlama').insert({...})
await supabase.from('hayvanlar').update({...}).eq('id', id)
await supabase.from('dogum').delete().eq('id', id)
await supabase.from('hastalik').update({...}).eq('id', id)
// ❌ Direkt REST bypass — YASAK!
write('tohumlama', {...}) // write() fonksiyonu yasak
// ✅ SADECE RPC kullan
await rpcOptimistic('tohumlama_kaydet', {
p_hayvan_id: hayvanId,
p_tarih: tarih
})
await rpcOptimistic('dogum_kaydet', {
p_anne_id: anneId,
p_tarih: tarih
})
await rpcOptimistic('hayvan_guncelle', {
p_id: id,
p_alan: 'grup_id',
p_deger: yeniGrupId
})
Her RPC çağrısı öncesi:
[ ] RPC adı `.claude/rpc-reference.md`'de var mı?
[ ] Parametreler imzayla eşleşiyor mu? (p_ prefix kontrolü)
[ ] Return type `{ ok: boolean, ... }` formatında mı?
[ ] `rpcOptimistic(name, params, opts)` — 1. parametre string RPC adı
[ ] Türkçe toast/error mesajları var mı?
rpc-reference.md'den kontrol:
CREATE OR REPLACE FUNCTION tohumlama_kaydet(
p_hayvan_id UUID,
p_tarih DATE,
p_sperma_kodu TEXT DEFAULT NULL,
p_teknisyen TEXT DEFAULT NULL
) RETURNS JSONB
Doğru kullanım:
const result = await rpcOptimistic('tohumlama_kaydet', {
p_hayvan_id: hayvanId, // UUID
p_tarih: tarih, // DATE
p_sperma_kodu: spermaKodu, // TEXT (opsiyonel)
p_teknisyen: teknisyen // TEXT (opsiyonel)
})
// Return: { ok: true, tohumlama_id: '...' }
Yanlış kullanım:
// ❌ Parametre adı yanlış (p_ prefix yok)
await rpcOptimistic('tohumlama_kaydet', {
hayvan_id: id, // YANLIŞ → p_hayvan_id olmalı
tarih: tarih
})
// ❌ Return type yanlış
const result = await rpcOptimistic(...)
console.log(result.data) // YANLIŞ → result.ok kontrol et
| Hata | Çözüm |
|---|---|
| Direkt INSERT | rpcOptimistic() kullan |
| p_ prefix eksik | Parametre adlarını rpc-reference.md'den kontrol et |
| Return type yanlış | { ok: boolean, ... } formatı kullan |
| RPC adı yanlış | .claude/rpc-reference.md kontrol et |
| Yasak fonksiyon | write() yerine rpcOptimistic() |
rpcOptimistic('tohumlama_kaydet', { p_hayvan_id, p_tarih, p_sperma_kodu, p_teknisyen })
rpcOptimistic('tohumlama_sonuc_gebe', { p_tohumlama_id })
rpcOptimistic('tohumlama_sonuc_bos', { p_tohumlama_id })
rpcOptimistic('dogum_kaydet', { p_anne_id, p_tarih, p_buzagi_cinsiyet, p_buzagi_kupe })
rpcOptimistic('hayvan_ekle', { p_kupe_no, p_grup_id, p_dogum_tarihi, p_cinsiyet })
rpcOptimistic('hayvan_guncelle', { p_id, p_alan, p_deger })
rpcOptimistic('hastalik_kaydet', { p_hayvan_id, p_tanis, p_tarih })
rpcOptimistic('hastalik_kapat', { p_id, p_kapanis_tarihi })
rpcOptimistic('hastalik_sil', { p_id })
rpcOptimistic('tedavi_ekle', { p_hastalik_id, p_ilac_id, p_doza, p_sure })
rpcOptimistic('tedavi_sil', { p_id })
rpcOptimistic('tedavi_guncelle', { p_id, p_alan, p_deger })
SQL Injection Önleme:
// ❌ YANLIŞ — String concat ile SQL injection riski
const query = `SELECT * FROM hayvanlar WHERE kupe_no = '${kupeNo}'`
// ✅ DOĞRU — RPC parametre binding kullanır
await rpcOptimistic('hayvan_bul', { p_kupe_no: kupeNo })
RPC otomatik parametre binding yapar — SQL injection güvenli!
[ ] RPC adı `.claude/rpc-reference.md`'de doğrulandı
[ ] Parametreler p_ prefix ile doğru
[ ] Return type { ok: boolean, ... } kontrol edildi
[ ] rpcOptimistic() kullanıldı (direkt REST yok)
[ ] Türkçe toast/error mesajları var
[ ] node --check geçti
.claude/rpc-reference.md.claude/domain-rules.md.claude/ui-map.mdBu skill yüklendiğinde: RPC contract-first development mode aktif olur.
🔒 RPC Contract hazır!