final review

This commit is contained in:
Pedro Rodrigues
2026-01-21 16:53:34 +00:00
parent 663d784e24
commit 221215b707
4 changed files with 12 additions and 57 deletions

View File

@@ -5,15 +5,9 @@ etc.) when working with code in this repository.
## Repository Overview ## Repository Overview
A collection of Postgres best practices skills for AI coding agents, A collection of Postgres best practices skills for AI coding agents, maintained
maintained by Supabase. Skills are packaged instructions that extend agent by Supabase. Skills are packaged instructions that extend agent capabilities for
capabilities for database optimization. database optimization.
## Installation
```bash
npx skills add supabase/agent-skills
```
## Creating a New Rule ## Creating a New Rule
@@ -65,7 +59,6 @@ tags: relevant, keywords
-- Comment explaining what's wrong -- Comment explaining what's wrong
[Bad SQL example] [Bad SQL example]
``` ```
````
**Correct (description):** **Correct (description):**
@@ -73,12 +66,8 @@ tags: relevant, keywords
-- Comment explaining why this is better -- Comment explaining why this is better
[Good SQL example] [Good SQL example]
``` ```
**Supabase Note:** [Optional platform-specific guidance]
Reference: [Link](url)
```` ````
### Best Practices for Context Efficiency ### Best Practices for Context Efficiency
Skills are loaded on-demand. To minimize context usage: Skills are loaded on-demand. To minimize context usage:
@@ -98,7 +87,7 @@ cd packages/postgres-best-practices-build
npm install npm install
npm run validate # Check rule format npm run validate # Check rule format
npm run build # Generate AGENTS.md npm run build # Generate AGENTS.md
```` ```
### Impact Levels ### Impact Levels
@@ -123,4 +112,3 @@ npm run build # Generate AGENTS.md
| `data-` | Data Access Patterns | 6 (MEDIUM) | | `data-` | Data Access Patterns | 6 (MEDIUM) |
| `monitor-` | Monitoring & Diagnostics | 7 (LOW-MEDIUM) | | `monitor-` | Monitoring & Diagnostics | 7 (LOW-MEDIUM) |
| `advanced-` | Advanced Features | 8 (LOW) | | `advanced-` | Advanced Features | 8 (LOW) |

View File

@@ -202,10 +202,6 @@ function buildAgents(): void {
} }
} }
if (rule.supabaseNotes) {
output.push(`**Supabase Note:** ${rule.supabaseNotes}\n`);
}
if (rule.references && rule.references.length > 0) { if (rule.references && rule.references.length > 0) {
if (rule.references.length === 1) { if (rule.references.length === 1) {
output.push(`Reference: ${rule.references[0]}\n`); output.push(`Reference: ${rule.references[0]}\n`);

View File

@@ -194,14 +194,6 @@ function extractReferences(body: string): string[] {
return references; return references;
} }
/**
* Extract Supabase notes
*/
function extractSupabaseNotes(body: string): string | undefined {
const match = body.match(/\*\*Supabase Note:\*\*\s*(.+?)(?=\n\n|\n\*\*|$)/s);
return match ? match[1].trim() : undefined;
}
/** /**
* Parse a rule file and return structured data * Parse a rule file and return structured data
*/ */
@@ -237,8 +229,7 @@ export function parseRuleFile(filePath: string): ParseResult {
// Extract other fields // Extract other fields
const explanation = extractExplanation(body); const explanation = extractExplanation(body);
const examples = extractExamples(body); const examples = extractExamples(body);
const references = extractReferences(body);
const supabaseNotes = extractSupabaseNotes(body);
const tags = frontmatter.tags?.split(",").map((t) => t.trim()) || []; const tags = frontmatter.tags?.split(",").map((t) => t.trim()) || [];
// Validation warnings // Validation warnings
@@ -258,9 +249,8 @@ export function parseRuleFile(filePath: string): ParseResult {
impactDescription: frontmatter.impactDescription, impactDescription: frontmatter.impactDescription,
explanation, explanation,
examples, examples,
references: references.length > 0 ? references : undefined, references: extractReferences(body),
tags: tags.length > 0 ? tags : undefined, tags: tags.length > 0 ? tags : undefined,
supabaseNotes,
}; };
return { success: true, rule, errors, warnings }; return { success: true, rule, errors, warnings };

View File

@@ -27,12 +27,12 @@ to recognize anti-patterns.
Include specific metrics. Helps agents prioritize fixes. Include specific metrics. Helps agents prioritize fixes.
**Good:** "10x faster queries", "50% smaller index", "Eliminates N+1" **Bad:** **Good:** "10x faster queries", "50% smaller index", "Eliminates N+1"
"Faster", "Better", "More efficient" **Bad:** "Faster", "Better", "More efficient"
### 4. Self-Contained Examples ### 4. Self-Contained Examples
Examples should be complete and runnable (or close to it). Include CREATE TABLE Examples should be complete and runnable (or close to it). Include `CREATE TABLE`
if context is needed. if context is needed.
```sql ```sql
@@ -51,8 +51,8 @@ CREATE INDEX users_active_email_idx ON users(email) WHERE deleted_at IS NULL;
Use meaningful table/column names. Names carry intent for LLMs. Use meaningful table/column names. Names carry intent for LLMs.
**Good:** `users`, `email`, `created_at`, `is_active` **Bad:** `table1`, `col1`, **Good:** `users`, `email`, `created_at`, `is_active`
`field`, `flag` **Bad:** `table1`, `col1`, `field`, `flag`
--- ---
@@ -120,7 +120,6 @@ const posts = await db.query("SELECT * FROM posts WHERE user_id = ANY($1)", [
]); ]);
``` ```
````
--- ---
## Impact Level Guidelines ## Impact Level Guidelines
@@ -136,24 +135,6 @@ const posts = await db.query("SELECT * FROM posts WHERE user_id = ANY($1)", [
--- ---
## Supabase-Specific Notes
**When to Add:**
- Supavisor pooling configuration
- Dashboard features (index monitoring, query stats)
- RLS patterns specific to Supabase auth
- PostgREST implications
**Format:**
```markdown
**Supabase Note:** The Dashboard > Database > Indexes page shows index usage statistics.
````
**Balance:** ~10% of content should be Supabase-specific. Core rules should work
on any Postgres.
---
## Reference Standards ## Reference Standards
**Primary Sources:** **Primary Sources:**