@ericrisco/rsc 0.1.65 → 0.1.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.65",
2
+ "version": "0.1.67",
3
3
  "counts": {
4
4
  "skills": 258
5
5
  },
@@ -4484,7 +4484,7 @@
4484
4484
  },
4485
4485
  {
4486
4486
  "id": "sql",
4487
- "description": "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs (incl. recursive), GROUP BY/GROUPING SETS aggregation, or UNION/INTERSECT/EXCEPT set ops — or when a query returns too many rows, too few rows, or wrong totals. Triggers: 'top N per group', 'running total', 'period over period', 'gaps and islands', 'recursive CTE', 'why is my SUM doubled', 'NOT IN returns nothing', 'dedup keep latest', 'consulta SQL avanzada', 'función de ventana', 'per què el JOIN duplica files'. NOT engine internals/indexes/EXPLAIN (that is postgresdb), NOT MySQL config (that is mysql), NOT OLAP columnar specifics (that is duckdb).",
4487
+ "description": "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING SETS aggregation, and set operations — or when a query returns too many rows, too few, or wrong totals. NOT engine internals, indexes or EXPLAIN (that is `postgresdb`), NOT MySQL config (that is `mysql`), NOT OLAP columnar specifics (that is `duckdb`).",
4488
4488
  "tags": [
4489
4489
  "sql",
4490
4490
  "query",
@@ -4502,7 +4502,7 @@
4502
4502
  },
4503
4503
  {
4504
4504
  "id": "sqlite-turso",
4505
- "description": "Use when deciding whether plain SQLite is enough or wiring SQLite/Turso/libSQL for local-first, edge, or embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model. Triggers: 'is SQLite enough', 'database is locked'/SQLITE_BUSY, 'embedded replica', 'edge database', 'createClient @libsql/client', 'database per user', 'sync local file to the cloud', 'base de datos local-first', 'base de dades a l'edge', 'rèplica incrustada'. NOT Drizzle schema/queries on libSQL (that is drizzle-orm), NOT versioned up/down migrations (that is db-migrations), NOT serverless Postgres with branching (that is neon).",
4505
+ "description": "Use when deciding whether plain SQLite is enough, or wiring SQLite, Turso or libSQL for local-first, edge and embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model and its lock errors. NOT Drizzle schema or queries on libSQL (that is `drizzle-orm`), NOT versioned up/down migrations (that is `db-migrations`), NOT serverless Postgres with branching (that is `neon`).",
4506
4506
  "tags": [
4507
4507
  "sqlite",
4508
4508
  "turso",
@@ -4524,7 +4524,7 @@
4524
4524
  },
4525
4525
  {
4526
4526
  "id": "stripe",
4527
- "description": "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks, or the billing portal — adding a paywall or Pro plan, charging recurring fees, or debugging why checkout.session.completed never fires or signature verification fails. Triggers: 'add Stripe Checkout', 'handle Stripe webhooks', 'let users cancel their subscription', 'No signatures found matching the expected signature', 'the webhook fires twice and duplicates the order', 'integrar pagos con Stripe', 'configurar el webhook de Stripe', 'portal de facturación del cliente'. NOT a generic non-Stripe inbound event receiver (that is webhooks), NOT the invoice document's legal form (that is invoicing), NOT deciding what to charge (that is pricing).",
4527
+ "description": "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks or the billing portal — adding a paywall or paid plan, charging recurring fees, and debugging why a completion event never fires, why signature verification fails, or why a webhook fires twice and duplicates the order. NOT a generic non-Stripe inbound event receiver (that is `webhooks`), NOT the invoice document's legal form (that is `invoicing`), NOT deciding what to charge (that is `pricing`).",
4528
4528
  "tags": [
4529
4529
  "stripe",
4530
4530
  "payments",
@@ -4545,7 +4545,7 @@
4545
4545
  },
4546
4546
  {
4547
4547
  "id": "structured-extraction",
4548
- "description": "Use when text must become a typed, schema-conformant object you can trust — pulling name/email/amount/due-date into a fixed JSON shape, extracting line items as typed records, classifying into enums, or fixing an extractor that throws JSON.parse errors, leaks markdown fences, or fabricates a value when a field is absent — including building the Pydantic/Zod model plus the validate-and-retry loop. Triggers: 'extract these fields into a fixed JSON schema', 'my LLM keeps returning a markdown fence and JSON.parse blows up', 'the model invents an email when the text has none — I want null', 'classify each ticket into one of 6 enums and pull the order id', 'build the Pydantic model and a retry loop for 10k receipts', 'convertir estos contratos en datos estructurados con un esquema fijo y validar los campos', 'extreure camps a un esquema fix i validar-los'. NOT getting the text out of a PDF/scan/DOCX first (that is document-processing), NOT general prompt craft untied to a schema (that is prompt-engineering).",
4548
+ "description": "Use when text must become a typed, schema-conformant object you can trust — pulling fields into a fixed JSON shape, extracting line items as typed records, classifying into enums, and building the Pydantic or Zod model plus the validate-and-retry loop. Covers extractors that throw parse errors, leak markdown fences, or fabricate a value where the field is absent instead of returning null. NOT getting the text out of a PDF, scan or DOCX first (that is `document-processing`), NOT general prompt craft untied to a schema (that is `prompt-engineering`).",
4549
4549
  "tags": [
4550
4550
  "structured-outputs",
4551
4551
  "json-schema",
@@ -4583,7 +4583,7 @@
4583
4583
  },
4584
4584
  {
4585
4585
  "id": "supabase",
4586
- "description": "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or @supabase/ssr client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, or Edge Functions. Triggers: 'my RLS policy returns no rows', 'cookie auth in Next.js with Supabase', 'getClaims vs getUser', 'should I verify the JWT locally or hit the Auth server', 'asymmetric signing keys', 'Broadcast vs Postgres Changes', 'service_role key', 'data API not exposing my table', 'configura Supabase con Next.js', 'mis políticas RLS no devuelven filas'. NOT raw Postgres tuning (that is postgresdb).",
4586
+ "description": "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or SSR client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, and Edge Functions, including local versus server JWT verification and the service-role key. NOT raw Postgres tuning (that is `postgresdb`).",
4587
4587
  "tags": [
4588
4588
  "supabase",
4589
4589
  "postgres",
@@ -4605,7 +4605,7 @@
4605
4605
  },
4606
4606
  {
4607
4607
  "id": "svelte",
4608
- "description": "Use when building, reviewing, or fixing Svelte 5 (runes) and SvelteKit code — components with $state/$derived/$effect/$props/$bindable, .svelte.js rune modules vs stores, file routing (+page/+layout/+server/+error), universal vs server load functions, form actions with use:enhance, remote functions, SSR/CSR/prerender, adapters. Triggers: '$state vs $derived', 'migrate Svelte 4 $: to runes', '+page.server.ts load', 'use:enhance form action', 'shared state across .svelte.js modules', 'hydration mismatch in SvelteKit', 'componente Svelte con runes', 'per què no es reactiu el meu $state'. NOT Next.js/RSC (that is nextjs).",
4608
+ "description": "Use when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus server load functions, form actions with progressive enhancement, remote functions, SSR/CSR/prerender choices, and adapters. Covers migrating Svelte 4 reactive statements to runes and hydration mismatches. NOT Next.js or RSC (that is `nextjs`).",
4609
4609
  "tags": [
4610
4610
  "svelte",
4611
4611
  "sveltekit",
@@ -4623,7 +4623,7 @@
4623
4623
  },
4624
4624
  {
4625
4625
  "id": "swift-ios",
4626
- "description": "Use when building native iOS / Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — designing @Observable view models, fixing Swift 6 strict data-race diagnostics, modeling async/await + actors, persisting with SwiftData, navigating with NavigationStack, or testing with Swift Testing. Triggers: 'native iOS app in SwiftUI', 'non-Sendable type crosses actor boundary', 'main actor-isolated property cannot be referenced from a nonisolated context', 'should this be an actor or @MainActor', '@Observable vs ObservableObject', '#expect vs XCTAssert', 'SwiftData @Model @Query', 'app nativa de iOS con SwiftUI i concurrència', 'liquid glass iOS 26'. NOT cross-platform Dart (that is flutter), NOT React Native (that is react-native), NOT native Kotlin/Android (that is kotlin-android), NOT shared KMP code across both OSes (that is compose-multiplatform).",
4626
+ "description": "Use when building native iOS and Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — observable view models, Swift 6 strict data-race diagnostics, async/await and actors, SwiftData persistence, NavigationStack, and Swift Testing. NOT cross-platform Dart (that is `flutter`), NOT React Native (that is `react-native`), NOT native Kotlin for Android (that is `kotlin-android`), NOT shared KMP code across both OSes (that is `compose-multiplatform`).",
4627
4627
  "tags": [
4628
4628
  "swift",
4629
4629
  "swiftui",
@@ -4684,7 +4684,7 @@
4684
4684
  },
4685
4685
  {
4686
4686
  "id": "technical-writing",
4687
- "description": "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, API/CLI/config reference — and the page tries to teach, explain, and list every parameter at once, a tutorial branches into choose-your-own-adventure, a reference is padded with opinions, a README reads like a sales pitch, code samples are stale or untested, or weasel words (simply, just, easy, seamless) crept in. Triggers: 'write a README for my CLI', 'turn these notes into a step-by-step getting-started guide', 'document this REST endpoint's params and error codes', 'my docs page tries to do everything and confuses people', 'split this into tutorial vs how-to', 'this README reads like a sales pitch', 'add a Vale lint to block simply/just in our /docs', 'escriu un README clar per aquesta llibreria', 'documenta esta API con una guía paso a paso'. NOT an SEO blog article (that is article-writing), and NOT the content calendar or pipeline (that is content-engine).",
4687
+ "description": "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, or API/CLI/config reference — especially when a page tries to teach, explain and enumerate at once, a tutorial branches, a reference is padded with opinions, a README reads like a sales pitch, samples are stale, or weasel words have crept in. NOT an SEO blog article (that is `article-writing`), NOT the content calendar or pipeline (that is `content-engine`).",
4688
4688
  "tags": [
4689
4689
  "documentation",
4690
4690
  "technical-writing",
@@ -4705,7 +4705,7 @@
4705
4705
  },
4706
4706
  {
4707
4707
  "id": "terms-conditions",
4708
- "description": "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service / Terms of Use, an Acceptable Use Policy, a EULA for installed software, and the standing legal notices a site must display (copyright, DMCA agent, governing law, auto-renewal); also when adding AI-feature terms (output ownership + accuracy disclaimers), wiring auto-renew disclosure, or fixing acceptance so it actually binds. Triggers: 'draft Terms of Service for our SaaS', 'write an Acceptable Use Policy', 'add a limitation-of-liability and arbitration clause', 'our terms are just a footer link, make them binding', 'what does our footer need to say legally', 'we auto-renew subscriptions, what must the terms say', 'redactar los términos y condiciones de la plataforma', 'termes i condicions del marketplace'. NOT a negotiated two-party agreement you sign with another business (that is contracts) and NOT the privacy policy or how personal data is handled (that is gdpr-privacy).",
4708
+ "description": "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service, an Acceptable Use Policy, a EULA for installed software, and the standing notices a site must display — plus AI-feature terms covering output ownership and accuracy, auto-renewal disclosure, and making acceptance actually binding. NOT a negotiated two-party agreement you sign with another business (that is `contracts`), NOT the privacy policy or how personal data is handled (that is `gdpr-privacy`).",
4709
4709
  "tags": [
4710
4710
  "legal",
4711
4711
  "terms-of-service",
@@ -4728,7 +4728,7 @@
4728
4728
  },
4729
4729
  {
4730
4730
  "id": "testing-go",
4731
- "description": "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, and fuzzing. Triggers: 'write Go tests', 'table-driven test', 'go test -cover', 'benchmark this function', 'testing.B.Loop', 'test concurrent goroutines deterministically', flaky parallel subtest uses wrong case data, golden files, 'mockear una interfaz en Go', 'cobertura de tests en Go', 'testar goroutines sense esperar 5 segons'. NOT general Go code or modules (that is go), NOT pytest fixtures (that is testing-py), NOT browser user flows (that is e2e-testing).",
4731
+ "description": "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, fuzzing, golden files, and testing concurrent goroutines deterministically. NOT general Go code or modules (that is `go`), NOT pytest fixtures (that is `testing-py`), NOT browser user flows (that is `e2e-testing`).",
4732
4732
  "tags": [
4733
4733
  "go",
4734
4734
  "testing",
@@ -4749,7 +4749,7 @@
4749
4749
  },
4750
4750
  {
4751
4751
  "id": "testing-py",
4752
- "description": "Use when writing or fixing Python tests with pytest and the suite is green but bugs still ship, when you must mock an external dependency and aren't sure where to patch, when coverage looks high but catches nothing, or when adding property-based tests for parsers/encoders/invariants. Triggers: 'write pytest tests', 'how do I mock this call', 'why does my mock pass when the code is broken', 'coverage is high but useless', 'patch where it's used', 'add Hypothesis property tests', 'fixture scope leaking state between tests', 'tests en Python', 'cómo mockeo esta llamada', 'la cobertura no detecta nada', 'tests de propietats'. NOT browser end-to-end flows (that is e2e-testing), NOT JS/TS unit tests (that is testing-web), NOT Go tests (that is testing-go).",
4752
+ "description": "Use when writing or fixing Python tests with pytest — especially when the suite is green but bugs still ship, when you must decide where to patch a mocked dependency, when coverage is high but catches nothing, when fixture scope leaks state, or when adding property-based tests for parsers and invariants. NOT browser end-to-end flows (that is `e2e-testing`), NOT JS/TS unit tests (that is `testing-web`), NOT Go tests (that is `testing-go`).",
4753
4753
  "tags": [
4754
4754
  "pytest",
4755
4755
  "python",
@@ -4770,7 +4770,7 @@
4770
4770
  },
4771
4771
  {
4772
4772
  "id": "testing-web",
4773
- "description": "Use when writing or fixing frontend unit, component, or custom-hook tests with Vitest or Jest plus Testing Library — rendering a React/Vue/Svelte component in jsdom, testing a hook in isolation, killing 'not wrapped in act' warnings, or migrating a Jest suite to Vitest. Triggers: 'test this component', 'renderHook for my useCountdown', 'getBy vs findBy, my query is flaky', 'An update to X was not wrapped in act warning', 'mock fetch in a Vitest test', 'set up Vitest with React Testing Library', 'test mi componente de carrito', 'provar un hook amb renderHook'. NOT real-browser multi-page journeys (that is e2e-testing), NOT pytest suites (that is testing-py), NOT axe/contrast/keyboard auditing (that is accessibility).",
4773
+ "description": "Use when writing or fixing frontend unit, component or custom-hook tests with Vitest or Jest plus Testing Library — rendering a component in jsdom, testing a hook in isolation, choosing between sync and async queries, silencing act warnings, mocking fetch, or migrating a Jest suite to Vitest. NOT real-browser multi-page journeys (that is `e2e-testing`), NOT pytest suites (that is `testing-py`), NOT accessibility auditing (that is `accessibility`).",
4774
4774
  "tags": [
4775
4775
  "testing",
4776
4776
  "frontend",
@@ -4794,7 +4794,7 @@
4794
4794
  },
4795
4795
  {
4796
4796
  "id": "tiktok-api",
4797
- "description": "Use when connecting a real TikTok account to code via the Content Posting API + Display API + Business Account API — OAuth v2 (Login Kit), chunked video publish (FILE_UPLOAD / PULL_FROM_URL with init → PUT → status poll), and pulling views / watch time / full_video_watched_rate / impression sources — then logging that performance into 02-DOCS/wiki/shortform/ as a dated feedback log. Triggers: 'publish a video to my TikTok account via the API and poll until it's live', 'my TikTok access token dies after 24 hours so the cron breaks', 'the Display API won't give me watch time / full_video_watched_rate', 'publish init returns url_ownership_unverified for my PULL_FROM_URL', 'rate_limit_exceeded — 6 requests per minute', 'append this week's FYP vs profile impression sources to the wiki', 'subir vídeos a TikTok por API y guardar las métricas del canal en el wiki', 'treure la retenció i el watch time de TikTok cap al wiki'. NOT what-to-post or how-to-package it (that is shortform-strategy / shortform-packaging).",
4797
+ "description": "Use when connecting a real TikTok account to code via the Content Posting, Display and Business Account APIs — OAuth, chunked video publish with status polling, and pulling views, watch time and impression sources, then logging that performance into the wiki as a dated feedback record. Covers short-lived tokens breaking a cron, unverified pull-from-URL ownership, and rate limits. NOT what to post or how to package it (that is `shortform-strategy` and `shortform-packaging`).",
4798
4798
  "tags": [
4799
4799
  "tiktok",
4800
4800
  "content-posting-api",
@@ -4849,7 +4849,7 @@
4849
4849
  },
4850
4850
  {
4851
4851
  "id": "training-data",
4852
- "description": "Use when assembling or curating the corpus a fine-tune trains on: turning raw examples into JSONL in the format a trainer expects (Alpaca instruction, conversational messages, DPO preference pairs, KTO binary-label), matching your data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, or quality-filtering. Triggers: 'what format should my fine-tuning dataset be in', 'build a DPO preference dataset', 'convert my Q&A into the messages/chat format', 'my chat template does not match my training data', 'generate synthetic instruction data with distilabel', 'dedup and decontaminate my training set', 'quants exemples necessito i com filtro la qualitat del dataset abans d'entrenar'. NOT cleaning tabular rows/nulls/dtypes (that is data-cleaning), NOT building a retrieval corpus of chunks+embeddings (that is embeddings-search), NOT running the trainer or picking LoRA hyperparameters (that is finetuning/unsloth).",
4852
+ "description": "Use when assembling or curating the corpus a fine-tune trains on — turning raw examples into the JSONL shape a trainer expects (instruction, conversational, preference-pair or binary-label), matching the data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, and quality-filtering. NOT cleaning tabular rows, nulls and dtypes (that is `data-cleaning`), NOT building a retrieval corpus of chunks and embeddings (that is `embeddings-search`), NOT running the trainer or picking hyperparameters (that is `finetuning`).",
4853
4853
  "tags": [
4854
4854
  "training-data",
4855
4855
  "fine-tuning-dataset",
@@ -4872,7 +4872,7 @@
4872
4872
  },
4873
4873
  {
4874
4874
  "id": "translation-l10n",
4875
- "description": "Use when adding a second or Nth language to a web/app product, wiring i18n plumbing (extract strings, ICU messages, locale routing), fixing broken plurals or dates, or making a UI survive other languages (RTL, text expansion). Triggers: 'ship the app in French and Arabic', 'set up next-intl routing with generateStaticParams', 'our Russian plurals always show the singular', 'German text overflows the buttons', 'dates still show American format for Spanish users', 'the Arabic layout is mirrored wrong', 'traducir la app al árabe y montar el glosario', 'necessito localitzar el producte'. NOT defining the brand's tone in one language (that is brand-voice).",
4875
+ "description": "Use when adding a second or Nth language to a web or app product — i18n plumbing (string extraction, ICU messages, locale routing), fixing broken plurals or date formats, and making a UI survive other languages through right-to-left layout and text expansion. NOT defining the brand's tone in one language (that is `brand-voice`).",
4876
4876
  "tags": [
4877
4877
  "i18n",
4878
4878
  "l10n",
@@ -4910,7 +4910,7 @@
4910
4910
  },
4911
4911
  {
4912
4912
  "id": "unit-economics",
4913
- "description": "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period, contribution margin — or judging whether LTV:CAC and payback are healthy against 2025-2026 norms, and naming the one lever that fixes the worst number. Triggers: 'what's our CAC / LTV / payback', 'is our LTV:CAC ratio healthy', 'our payback period feels too long', 'is a 5:1 LTV:CAC actually good', 'our blended CAC looks fine but I think paid is bleeding money', 'the model says we're profitable but each customer feels like a loss — what's the contribution margin per customer', 'calcula'm el CAC i quant trigo a recuperar el cost d'un client', 'el ratio LTV:CAC és sa?', 'margen de contribución por cliente'. NOT the multi-year P&L / scenario projection (that is financial-model).",
4913
+ "description": "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period and contribution margin — judging whether the ratios are healthy against current norms, and naming the one lever that fixes the worst number. Covers a blended CAC that hides a bleeding channel, and a model that shows profit while each customer loses money. NOT the multi-year P&L or scenario projection (that is `financial-model`).",
4914
4914
  "tags": [
4915
4915
  "cac",
4916
4916
  "ltv",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "0.1.65",
3
+ "version": "0.1.67",
4
4
  "description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sql
3
- description: "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs (incl. recursive), GROUP BY/GROUPING SETS aggregation, or UNION/INTERSECT/EXCEPT set ops — or when a query returns too many rows, too few rows, or wrong totals. Triggers: 'top N per group', 'running total', 'period over period', 'gaps and islands', 'recursive CTE', 'why is my SUM doubled', 'NOT IN returns nothing', 'dedup keep latest', 'consulta SQL avanzada', 'función de ventana', 'per què el JOIN duplica files'. NOT engine internals/indexes/EXPLAIN (that is postgresdb), NOT MySQL config (that is mysql), NOT OLAP columnar specifics (that is duckdb)."
3
+ description: "Use when writing or reviewing advanced SQL query logic independent of any one engine — multi-table joins, window functions, CTEs including recursive ones, GROUP BY and GROUPING SETS aggregation, and set operations — or when a query returns too many rows, too few, or wrong totals. NOT engine internals, indexes or EXPLAIN (that is `postgresdb`), NOT MySQL config (that is `mysql`), NOT OLAP columnar specifics (that is `duckdb`)."
4
4
  tags: [sql, query, joins, window-functions, cte]
5
5
  recommends: [postgresdb, mysql, duckdb, drizzle-orm]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sqlite-turso
3
- description: "Use when deciding whether plain SQLite is enough or wiring SQLite/Turso/libSQL for local-first, edge, or embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model. Triggers: 'is SQLite enough', 'database is locked'/SQLITE_BUSY, 'embedded replica', 'edge database', 'createClient @libsql/client', 'database per user', 'sync local file to the cloud', 'base de datos local-first', 'base de dades a l'edge', 'rèplica incrustada'. NOT Drizzle schema/queries on libSQL (that is drizzle-orm), NOT versioned up/down migrations (that is db-migrations), NOT serverless Postgres with branching (that is neon)."
3
+ description: "Use when deciding whether plain SQLite is enough, or wiring SQLite, Turso or libSQL for local-first, edge and embedded-replica apps — a local file DB, a remote Turso URL, or a local replica synced to a remote primary — plus WAL mode and SQLite's single-writer model and its lock errors. NOT Drizzle schema or queries on libSQL (that is `drizzle-orm`), NOT versioned up/down migrations (that is `db-migrations`), NOT serverless Postgres with branching (that is `neon`)."
4
4
  tags: [sqlite, turso, libsql, edge, embedded-replica, local-first, wal]
5
5
  recommends: [drizzle-orm, db-migrations, postgresdb, neon, backups, sql]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: stripe
3
- description: "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks, or the billing portal — adding a paywall or Pro plan, charging recurring fees, or debugging why checkout.session.completed never fires or signature verification fails. Triggers: 'add Stripe Checkout', 'handle Stripe webhooks', 'let users cancel their subscription', 'No signatures found matching the expected signature', 'the webhook fires twice and duplicates the order', 'integrar pagos con Stripe', 'configurar el webhook de Stripe', 'portal de facturación del cliente'. NOT a generic non-Stripe inbound event receiver (that is webhooks), NOT the invoice document's legal form (that is invoicing), NOT deciding what to charge (that is pricing)."
3
+ description: "Use when wiring an app to Stripe for payments, subscriptions, Checkout, webhooks or the billing portal — adding a paywall or paid plan, charging recurring fees, and debugging why a completion event never fires, why signature verification fails, or why a webhook fires twice and duplicates the order. NOT a generic non-Stripe inbound event receiver (that is `webhooks`), NOT the invoice document's legal form (that is `invoicing`), NOT deciding what to charge (that is `pricing`)."
4
4
  tags: [stripe, payments, subscriptions, checkout, webhooks, billing, saas]
5
5
  recommends: [webhooks, invoicing, pricing, secure-coding, nodejs]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: structured-extraction
3
- description: "Use when text must become a typed, schema-conformant object you can trust — pulling name/email/amount/due-date into a fixed JSON shape, extracting line items as typed records, classifying into enums, or fixing an extractor that throws JSON.parse errors, leaks markdown fences, or fabricates a value when a field is absent — including building the Pydantic/Zod model plus the validate-and-retry loop. Triggers: 'extract these fields into a fixed JSON schema', 'my LLM keeps returning a markdown fence and JSON.parse blows up', 'the model invents an email when the text has none — I want null', 'classify each ticket into one of 6 enums and pull the order id', 'build the Pydantic model and a retry loop for 10k receipts', 'convertir estos contratos en datos estructurados con un esquema fijo y validar los campos', 'extreure camps a un esquema fix i validar-los'. NOT getting the text out of a PDF/scan/DOCX first (that is document-processing), NOT general prompt craft untied to a schema (that is prompt-engineering)."
3
+ description: "Use when text must become a typed, schema-conformant object you can trust — pulling fields into a fixed JSON shape, extracting line items as typed records, classifying into enums, and building the Pydantic or Zod model plus the validate-and-retry loop. Covers extractors that throw parse errors, leak markdown fences, or fabricate a value where the field is absent instead of returning null. NOT getting the text out of a PDF, scan or DOCX first (that is `document-processing`), NOT general prompt craft untied to a schema (that is `prompt-engineering`)."
4
4
  tags: [structured-outputs, json-schema, pydantic, extraction, validation, llm]
5
5
  recommends: [document-processing, prompt-engineering, llm-pipeline, agent-eval, rag, data-cleaning]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: supabase
3
- description: "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or @supabase/ssr client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, or Edge Functions. Triggers: 'my RLS policy returns no rows', 'cookie auth in Next.js with Supabase', 'getClaims vs getUser', 'should I verify the JWT locally or hit the Auth server', 'asymmetric signing keys', 'Broadcast vs Postgres Changes', 'service_role key', 'data API not exposing my table', 'configura Supabase con Next.js', 'mis políticas RLS no devuelven filas'. NOT raw Postgres tuning (that is postgresdb)."
3
+ description: "Use when building on Supabase as a backend over managed Postgres — wiring the supabase-js or SSR client, writing or debugging Row Level Security, cookie-based Auth, Storage buckets, Realtime, and Edge Functions, including local versus server JWT verification and the service-role key. NOT raw Postgres tuning (that is `postgresdb`)."
4
4
  tags: [supabase, postgres, rls, auth, edge-functions, realtime, storage, baas]
5
5
  recommends: [postgresdb, nextjs, db-migrations, secure-coding, drizzle-orm]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: svelte
3
- description: "Use when building, reviewing, or fixing Svelte 5 (runes) and SvelteKit code — components with $state/$derived/$effect/$props/$bindable, .svelte.js rune modules vs stores, file routing (+page/+layout/+server/+error), universal vs server load functions, form actions with use:enhance, remote functions, SSR/CSR/prerender, adapters. Triggers: '$state vs $derived', 'migrate Svelte 4 $: to runes', '+page.server.ts load', 'use:enhance form action', 'shared state across .svelte.js modules', 'hydration mismatch in SvelteKit', 'componente Svelte con runes', 'per què no es reactiu el meu $state'. NOT Next.js/RSC (that is nextjs)."
3
+ description: "Use when building, reviewing or fixing Svelte 5 (runes) and SvelteKit code — components with the rune primitives, rune modules versus stores, file routing, universal versus server load functions, form actions with progressive enhancement, remote functions, SSR/CSR/prerender choices, and adapters. Covers migrating Svelte 4 reactive statements to runes and hydration mismatches. NOT Next.js or RSC (that is `nextjs`)."
4
4
  tags: [svelte, sveltekit, runes, frontend, ssr, web]
5
5
  recommends: [typescript, vercel, design]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: swift-ios
3
- description: "Use when building native iOS / Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — designing @Observable view models, fixing Swift 6 strict data-race diagnostics, modeling async/await + actors, persisting with SwiftData, navigating with NavigationStack, or testing with Swift Testing. Triggers: 'native iOS app in SwiftUI', 'non-Sendable type crosses actor boundary', 'main actor-isolated property cannot be referenced from a nonisolated context', 'should this be an actor or @MainActor', '@Observable vs ObservableObject', '#expect vs XCTAssert', 'SwiftData @Model @Query', 'app nativa de iOS con SwiftUI i concurrència', 'liquid glass iOS 26'. NOT cross-platform Dart (that is flutter), NOT React Native (that is react-native), NOT native Kotlin/Android (that is kotlin-android), NOT shared KMP code across both OSes (that is compose-multiplatform)."
3
+ description: "Use when building native iOS and Apple-platform apps in Swift with SwiftUI and modern Swift concurrency — observable view models, Swift 6 strict data-race diagnostics, async/await and actors, SwiftData persistence, NavigationStack, and Swift Testing. NOT cross-platform Dart (that is `flutter`), NOT React Native (that is `react-native`), NOT native Kotlin for Android (that is `kotlin-android`), NOT shared KMP code across both OSes (that is `compose-multiplatform`)."
4
4
  tags: [swift, swiftui, ios, swift-concurrency, swiftdata, swift-testing, apple]
5
5
  recommends: [kotlin-android, compose-multiplatform, flutter, react-native, expo, testing-web, github-actions, ship]
6
6
  profiles: []
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: technical-writing
3
- description: "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, API/CLI/config reference — and the page tries to teach, explain, and list every parameter at once, a tutorial branches into choose-your-own-adventure, a reference is padded with opinions, a README reads like a sales pitch, code samples are stale or untested, or weasel words (simply, just, easy, seamless) crept in. Triggers: 'write a README for my CLI', 'turn these notes into a step-by-step getting-started guide', 'document this REST endpoint's params and error codes', 'my docs page tries to do everything and confuses people', 'split this into tutorial vs how-to', 'this README reads like a sales pitch', 'add a Vale lint to block simply/just in our /docs', 'escriu un README clar per aquesta llibreria', 'documenta esta API con una guía paso a paso'. NOT an SEO blog article (that is article-writing), and NOT the content calendar or pipeline (that is content-engine)."
3
+ description: "Use when writing or fixing user-facing technical docs — a README, a getting-started tutorial, a how-to guide, or API/CLI/config reference — especially when a page tries to teach, explain and enumerate at once, a tutorial branches, a reference is padded with opinions, a README reads like a sales pitch, samples are stale, or weasel words have crept in. NOT an SEO blog article (that is `article-writing`), NOT the content calendar or pipeline (that is `content-engine`)."
4
4
  tags: [documentation, technical-writing, diataxis, readme, docs-as-code, developer-docs]
5
5
  recommends: [article-writing, content-engine, course-storytelling, translation-l10n, brand-voice, accessibility]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: terms-conditions
3
- description: "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service / Terms of Use, an Acceptable Use Policy, a EULA for installed software, and the standing legal notices a site must display (copyright, DMCA agent, governing law, auto-renewal); also when adding AI-feature terms (output ownership + accuracy disclaimers), wiring auto-renew disclosure, or fixing acceptance so it actually binds. Triggers: 'draft Terms of Service for our SaaS', 'write an Acceptable Use Policy', 'add a limitation-of-liability and arbitration clause', 'our terms are just a footer link, make them binding', 'what does our footer need to say legally', 'we auto-renew subscriptions, what must the terms say', 'redactar los términos y condiciones de la plataforma', 'termes i condicions del marketplace'. NOT a negotiated two-party agreement you sign with another business (that is contracts) and NOT the privacy policy or how personal data is handled (that is gdpr-privacy)."
3
+ description: "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service, an Acceptable Use Policy, a EULA for installed software, and the standing notices a site must display — plus AI-feature terms covering output ownership and accuracy, auto-renewal disclosure, and making acceptance actually binding. NOT a negotiated two-party agreement you sign with another business (that is `contracts`), NOT the privacy policy or how personal data is handled (that is `gdpr-privacy`)."
4
4
  tags: [legal, terms-of-service, acceptable-use-policy, eula, dmca, clickwrap, auto-renewal, limitation-of-liability]
5
5
  recommends: [gdpr-privacy, contracts, e-signature, ip-trademark, compliance, data-policy]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-go
3
- description: "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, and fuzzing. Triggers: 'write Go tests', 'table-driven test', 'go test -cover', 'benchmark this function', 'testing.B.Loop', 'test concurrent goroutines deterministically', flaky parallel subtest uses wrong case data, golden files, 'mockear una interfaz en Go', 'cobertura de tests en Go', 'testar goroutines sense esperar 5 segons'. NOT general Go code or modules (that is go), NOT pytest fixtures (that is testing-py), NOT browser user flows (that is e2e-testing)."
3
+ description: "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, fuzzing, golden files, and testing concurrent goroutines deterministically. NOT general Go code or modules (that is `go`), NOT pytest fixtures (that is `testing-py`), NOT browser user flows (that is `e2e-testing`)."
4
4
  tags: [go, testing, table-driven-tests, benchmarks, coverage, synctest, mocks, fuzzing]
5
5
  recommends: [go, secure-coding, testing-py, e2e-testing]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-py
3
- description: "Use when writing or fixing Python tests with pytest and the suite is green but bugs still ship, when you must mock an external dependency and aren't sure where to patch, when coverage looks high but catches nothing, or when adding property-based tests for parsers/encoders/invariants. Triggers: 'write pytest tests', 'how do I mock this call', 'why does my mock pass when the code is broken', 'coverage is high but useless', 'patch where it's used', 'add Hypothesis property tests', 'fixture scope leaking state between tests', 'tests en Python', 'cómo mockeo esta llamada', 'la cobertura no detecta nada', 'tests de propietats'. NOT browser end-to-end flows (that is e2e-testing), NOT JS/TS unit tests (that is testing-web), NOT Go tests (that is testing-go)."
3
+ description: "Use when writing or fixing Python tests with pytest — especially when the suite is green but bugs still ship, when you must decide where to patch a mocked dependency, when coverage is high but catches nothing, when fixture scope leaks state, or when adding property-based tests for parsers and invariants. NOT browser end-to-end flows (that is `e2e-testing`), NOT JS/TS unit tests (that is `testing-web`), NOT Go tests (that is `testing-go`)."
4
4
  tags: [pytest, python, testing, coverage, hypothesis, mocking, fixtures, property-based]
5
5
  recommends: [python, code-review, github-actions, e2e-testing]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-web
3
- description: "Use when writing or fixing frontend unit, component, or custom-hook tests with Vitest or Jest plus Testing Library — rendering a React/Vue/Svelte component in jsdom, testing a hook in isolation, killing 'not wrapped in act' warnings, or migrating a Jest suite to Vitest. Triggers: 'test this component', 'renderHook for my useCountdown', 'getBy vs findBy, my query is flaky', 'An update to X was not wrapped in act warning', 'mock fetch in a Vitest test', 'set up Vitest with React Testing Library', 'test mi componente de carrito', 'provar un hook amb renderHook'. NOT real-browser multi-page journeys (that is e2e-testing), NOT pytest suites (that is testing-py), NOT axe/contrast/keyboard auditing (that is accessibility)."
3
+ description: "Use when writing or fixing frontend unit, component or custom-hook tests with Vitest or Jest plus Testing Library — rendering a component in jsdom, testing a hook in isolation, choosing between sync and async queries, silencing act warnings, mocking fetch, or migrating a Jest suite to Vitest. NOT real-browser multi-page journeys (that is `e2e-testing`), NOT pytest suites (that is `testing-py`), NOT accessibility auditing (that is `accessibility`)."
4
4
  tags: [testing, frontend, vitest, jest, testing-library, react, hooks, component-testing, jsdom]
5
5
  recommends: [e2e-testing, accessibility, testing-py, react, nextjs, debug]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tiktok-api
3
- description: "Use when connecting a real TikTok account to code via the Content Posting API + Display API + Business Account API — OAuth v2 (Login Kit), chunked video publish (FILE_UPLOAD / PULL_FROM_URL with init → PUT → status poll), and pulling views / watch time / full_video_watched_rate / impression sources — then logging that performance into 02-DOCS/wiki/shortform/ as a dated feedback log. Triggers: 'publish a video to my TikTok account via the API and poll until it's live', 'my TikTok access token dies after 24 hours so the cron breaks', 'the Display API won't give me watch time / full_video_watched_rate', 'publish init returns url_ownership_unverified for my PULL_FROM_URL', 'rate_limit_exceeded — 6 requests per minute', 'append this week's FYP vs profile impression sources to the wiki', 'subir vídeos a TikTok por API y guardar las métricas del canal en el wiki', 'treure la retenció i el watch time de TikTok cap al wiki'. NOT what-to-post or how-to-package it (that is shortform-strategy / shortform-packaging)."
3
+ description: "Use when connecting a real TikTok account to code via the Content Posting, Display and Business Account APIs — OAuth, chunked video publish with status polling, and pulling views, watch time and impression sources, then logging that performance into the wiki as a dated feedback record. Covers short-lived tokens breaking a cron, unverified pull-from-URL ownership, and rate limits. NOT what to post or how to package it (that is `shortform-strategy` and `shortform-packaging`)."
4
4
  tags: [tiktok, content-posting-api, tiktok-display-api, tiktok-business-api, oauth2, chunked-upload, video-publish, watch-time, completion-rate, shortform-feedback-log]
5
5
  recommends: [shortform-strategy, shortform-packaging, shortform-ideation, shortform-editing, social-publisher, instagram-api, youtube-api, api-connector-builder, automation-flows, knowledge-ops]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: training-data
3
- description: "Use when assembling or curating the corpus a fine-tune trains on: turning raw examples into JSONL in the format a trainer expects (Alpaca instruction, conversational messages, DPO preference pairs, KTO binary-label), matching your data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, or quality-filtering. Triggers: 'what format should my fine-tuning dataset be in', 'build a DPO preference dataset', 'convert my Q&A into the messages/chat format', 'my chat template does not match my training data', 'generate synthetic instruction data with distilabel', 'dedup and decontaminate my training set', 'quants exemples necessito i com filtro la qualitat del dataset abans d'entrenar'. NOT cleaning tabular rows/nulls/dtypes (that is data-cleaning), NOT building a retrieval corpus of chunks+embeddings (that is embeddings-search), NOT running the trainer or picking LoRA hyperparameters (that is finetuning/unsloth)."
3
+ description: "Use when assembling or curating the corpus a fine-tune trains on — turning raw examples into the JSONL shape a trainer expects (instruction, conversational, preference-pair or binary-label), matching the data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, and quality-filtering. NOT cleaning tabular rows, nulls and dtypes (that is `data-cleaning`), NOT building a retrieval corpus of chunks and embeddings (that is `embeddings-search`), NOT running the trainer or picking hyperparameters (that is `finetuning`)."
4
4
  tags: [training-data, fine-tuning-dataset, jsonl, chat-template, preference-data, dpo, kto, synthetic-data, decontamination, dataset-curation]
5
5
  recommends: [finetuning, unsloth, huggingface, data-cleaning]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: translation-l10n
3
- description: "Use when adding a second or Nth language to a web/app product, wiring i18n plumbing (extract strings, ICU messages, locale routing), fixing broken plurals or dates, or making a UI survive other languages (RTL, text expansion). Triggers: 'ship the app in French and Arabic', 'set up next-intl routing with generateStaticParams', 'our Russian plurals always show the singular', 'German text overflows the buttons', 'dates still show American format for Spanish users', 'the Arabic layout is mirrored wrong', 'traducir la app al árabe y montar el glosario', 'necessito localitzar el producte'. NOT defining the brand's tone in one language (that is brand-voice)."
3
+ description: "Use when adding a second or Nth language to a web or app product — i18n plumbing (string extraction, ICU messages, locale routing), fixing broken plurals or date formats, and making a UI survive other languages through right-to-left layout and text expansion. NOT defining the brand's tone in one language (that is `brand-voice`)."
4
4
  tags: [i18n, l10n, internationalization, localization, translation, rtl, icu-messageformat]
5
5
  recommends: [brand-voice, nextjs, seo-geo, accessibility, content-engine]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: unit-economics
3
- description: "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period, contribution margin — or judging whether LTV:CAC and payback are healthy against 2025-2026 norms, and naming the one lever that fixes the worst number. Triggers: 'what's our CAC / LTV / payback', 'is our LTV:CAC ratio healthy', 'our payback period feels too long', 'is a 5:1 LTV:CAC actually good', 'our blended CAC looks fine but I think paid is bleeding money', 'the model says we're profitable but each customer feels like a loss — what's the contribution margin per customer', 'calcula'm el CAC i quant trigo a recuperar el cost d'un client', 'el ratio LTV:CAC és sa?', 'margen de contribución por cliente'. NOT the multi-year P&L / scenario projection (that is financial-model)."
3
+ description: "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period and contribution margin — judging whether the ratios are healthy against current norms, and naming the one lever that fixes the worst number. Covers a blended CAC that hides a bleeding channel, and a model that shows profit while each customer loses money. NOT the multi-year P&L or scenario projection (that is `financial-model`)."
4
4
  tags: ["cac", "ltv", "payback-period", "contribution-margin", "unit-economics", "ltv-cac-ratio", "nrr", "saas-metrics"]
5
5
  recommends: ["financial-model", "pricing", "retention", "cost-tracking", "forecasting", "investor-materials", "dashboard"]
6
6
  origin: risco