@ericrisco/rsc 0.1.54 → 0.1.56
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 +11 -11
- package/package.json +1 -1
- package/skills/gdpr-privacy/SKILL.md +3 -11
- package/skills/gdpr-privacy/evals/cases.yaml +2 -2
- package/skills/invoicing/SKILL.md +3 -12
- package/skills/linkedin-outreach/SKILL.md +11 -31
- package/skills/meeting-notes/SKILL.md +15 -30
- package/skills/no-code-app/SKILL.md +9 -17
- package/skills/performance/SKILL.md +2 -7
- package/skills/power-automate/SKILL.md +10 -19
- package/skills/react-native/SKILL.md +4 -14
- package/skills/react-native/scripts/verify.sh +5 -2
- package/skills/roast-me/SKILL.md +3 -5
- package/skills/roast-me/evals/cases.yaml +3 -3
- package/skills/shortform-strategy/SKILL.md +7 -19
package/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.1.
|
|
2
|
+
"version": "0.1.56",
|
|
3
3
|
"counts": {
|
|
4
4
|
"skills": 258
|
|
5
5
|
},
|
|
@@ -2020,7 +2020,7 @@
|
|
|
2020
2020
|
},
|
|
2021
2021
|
{
|
|
2022
2022
|
"id": "gdpr-privacy",
|
|
2023
|
-
"description": "Use when
|
|
2023
|
+
"description": "Use when producing the GDPR artifacts a product publishes or hands over: a privacy policy true to what it processes, a cookie/consent banner, a lawful basis per purpose, an Art. 28 DPA, an SCC transfer mechanism, or a DSAR flow. Drafts for counsel review. NOT internal retention rules (that is `data-policy`), NOT consumer ToS (that is `terms-conditions`).",
|
|
2024
2024
|
"tags": [
|
|
2025
2025
|
"gdpr",
|
|
2026
2026
|
"privacy",
|
|
@@ -2379,7 +2379,7 @@
|
|
|
2379
2379
|
},
|
|
2380
2380
|
{
|
|
2381
2381
|
"id": "invoicing",
|
|
2382
|
-
"description": "Use when
|
|
2382
|
+
"description": "Use when issuing an invoice, quote, or credit note and moving it draft-to-paid — the legally required VAT fields, gap-free numbering, per-country e-invoicing mandates, dunning overdue ones. NOT recording a paid invoice in the books (that is `bookkeeping`), NOT Stripe SDK plumbing (that is `stripe`), NOT setting the price (that is `pricing`).",
|
|
2383
2383
|
"tags": [
|
|
2384
2384
|
"invoicing",
|
|
2385
2385
|
"billing",
|
|
@@ -2654,7 +2654,7 @@
|
|
|
2654
2654
|
},
|
|
2655
2655
|
{
|
|
2656
2656
|
"id": "linkedin-outreach",
|
|
2657
|
-
"description": "Use when running LinkedIn
|
|
2657
|
+
"description": "Use when running LinkedIn social selling as a repeatable motion — Sales Navigator saved searches and trigger alerts, weekly request budgets, fixing a low acceptance rate, turning profile views and post engagers into warm threads, logging every touch. NOT the note or DM copy (that is `cold-outreach`), NOT the deal after a reply (that is `sales-pipeline`).",
|
|
2658
2658
|
"tags": [
|
|
2659
2659
|
"linkedin",
|
|
2660
2660
|
"social-selling",
|
|
@@ -2888,7 +2888,7 @@
|
|
|
2888
2888
|
},
|
|
2889
2889
|
{
|
|
2890
2890
|
"id": "meeting-notes",
|
|
2891
|
-
"description": "Use when a meeting
|
|
2891
|
+
"description": "Use when a meeting just ended and a transcript or rough notes must become a record the absent can act on — decisions with their why, actions with an owner and a real date, open questions, a recap inside 24–48h — or to clean an AI-notetaker draft that invented tasks or swapped speakers. NOT the durable ADR with alternatives weighed (that is decision-records).",
|
|
2892
2892
|
"tags": [
|
|
2893
2893
|
"meeting-notes",
|
|
2894
2894
|
"action-items",
|
|
@@ -3135,7 +3135,7 @@
|
|
|
3135
3135
|
},
|
|
3136
3136
|
{
|
|
3137
3137
|
"id": "no-code-app",
|
|
3138
|
-
"description": "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide
|
|
3138
|
+
"description": "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide over Airtable or Xano) — picking the platform, modeling the data, keeping usage-metered cost predictable, and planning the exit before lock-in. NOT a hand-written coded app (that is `nextjs`), NOT wiring SaaS tools together with no app UI (that is `automation-flows`).",
|
|
3139
3139
|
"tags": [
|
|
3140
3140
|
"no-code",
|
|
3141
3141
|
"low-code",
|
|
@@ -3307,7 +3307,7 @@
|
|
|
3307
3307
|
},
|
|
3308
3308
|
{
|
|
3309
3309
|
"id": "performance",
|
|
3310
|
-
"description": "Use when
|
|
3310
|
+
"description": "Use when a page or interaction is slow for one user and the fix starts from a measurement — a failing Core Web Vital (LCP, INP, CLS), a heavy JS bundle, wasted re-renders, an over-broad client boundary: profile, attribute the cost to one phase, fix it, re-measure. NOT surviving concurrent load (that is `scaling`), NOT the slow query (that is `postgresdb`).",
|
|
3311
3311
|
"tags": [
|
|
3312
3312
|
"performance",
|
|
3313
3313
|
"core-web-vitals",
|
|
@@ -3459,7 +3459,7 @@
|
|
|
3459
3459
|
},
|
|
3460
3460
|
{
|
|
3461
3461
|
"id": "power-automate",
|
|
3462
|
-
"description": "Use when operating Microsoft Power Automate cloud flows
|
|
3462
|
+
"description": "Use when operating Microsoft Power Automate cloud flows from code — create, enable, update, list or delete via the Dataverse Web API (`workflow` table, category 5) with Entra ID OAuth2, plus run-history debugging. NOT designing the flow definition (that is `automation-flows`), NOT picking a platform by billing model (that is `automation-strategy`).",
|
|
3463
3463
|
"tags": [
|
|
3464
3464
|
"power-automate",
|
|
3465
3465
|
"dataverse",
|
|
@@ -3750,7 +3750,7 @@
|
|
|
3750
3750
|
},
|
|
3751
3751
|
{
|
|
3752
3752
|
"id": "react-native",
|
|
3753
|
-
"description": "Use when writing the JS/TS
|
|
3753
|
+
"description": "Use when writing the JS/TS inside a React Native or Expo app — screens, Expo Router navigation, lists, Reanimated gestures, platform forks, offline state, native modules — or killing jank and render storms. NOT eas build/submit/OTA/config-plugin (that is `expo`), NOT a Dart app (that is `flutter`), NOT web React/DOM (that is `react` or `nextjs`).",
|
|
3754
3754
|
"tags": [
|
|
3755
3755
|
"react-native",
|
|
3756
3756
|
"expo",
|
|
@@ -3994,7 +3994,7 @@
|
|
|
3994
3994
|
},
|
|
3995
3995
|
{
|
|
3996
3996
|
"id": "roast-me",
|
|
3997
|
-
"description": "Use when
|
|
3997
|
+
"description": "Use when someone wants an honest, comedic audit of their own prompting — reads their past agent transcripts, scores prompt quality and compute efficiency, names their worst habits, builds a model-selection cheat sheet. NOT reviewing code an agent produced (that is `code-review`), NOT prompting technique in general (that is `prompt-engineering`).",
|
|
3998
3998
|
"tags": [
|
|
3999
3999
|
"prompting",
|
|
4000
4000
|
"self-audit",
|
|
@@ -4322,7 +4322,7 @@
|
|
|
4322
4322
|
},
|
|
4323
4323
|
{
|
|
4324
4324
|
"id": "shortform-strategy",
|
|
4325
|
-
"description": "Use when
|
|
4325
|
+
"description": "Use when the unit of work is a TikTok/Reels account, not one clip: positioning, sustainable cadence and format mix, ride-or-skip on a trend or sound, recurring series, diagnosing a flat account, and the dated learning loop. NOT the single script or hook variants (that is `video-shorts`), NOT the idea backlog (that is `shortform-ideation`).",
|
|
4326
4326
|
"tags": [
|
|
4327
4327
|
"short-form-video",
|
|
4328
4328
|
"tiktok",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gdpr-privacy
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when producing the GDPR artifacts a product publishes or hands over: a privacy policy true to what it processes, a cookie/consent banner, a lawful basis per purpose, an Art. 28 DPA, an SCC transfer mechanism, or a DSAR flow. Drafts for counsel review. NOT internal retention rules (that is `data-policy`), NOT consumer ToS (that is `terms-conditions`)."
|
|
4
4
|
tags: [gdpr, privacy, data-protection, cookies, consent, lawful-basis, dpa, scc, dsar, ropa, dpia, rgpd]
|
|
5
5
|
recommends: [data-policy, terms-conditions, contracts, compliance, secure-coding, email-deliverability]
|
|
6
6
|
origin: risco
|
|
@@ -128,9 +128,7 @@ Per-right runbook: `references/dsar-and-consent.md`.
|
|
|
128
128
|
- **DPIA (Art. 35):** mandatory *before* any processing "likely to result in a high risk." Trigger checklist — do a DPIA if any apply: large-scale processing of special categories (Art. 9 data), systematic monitoring of a public area, or novel/high-risk technology (e.g. new biometric or AI-driven profiling). When in doubt, do it.
|
|
129
129
|
- **Breach (Art. 33/34):** notify the supervisory authority **within 72 hours** of becoming aware, unless the breach is unlikely to result in risk; notify affected individuals when the risk to them is high. Have the contact and the template ready *before* a breach, not during.
|
|
130
130
|
|
|
131
|
-
##
|
|
132
|
-
|
|
133
|
-
This skill drafts artifacts and flags issues. It is **not legal advice**. Emit the counsel/DPO-review line before anything is published or relied on — every time, no exceptions.
|
|
131
|
+
## Stakes, and what isn't yours
|
|
134
132
|
|
|
135
133
|
The fines make the stakes concrete: up to **€20M or 4% of global annual turnover** (whichever is higher) for the most serious infringements, €10M / 2% for the lesser tier; cumulative GDPR fines already exceed €7.1B. This is not a Big-Tech-only risk.
|
|
136
134
|
|
|
@@ -158,10 +156,4 @@ Hand off what isn't yours:
|
|
|
158
156
|
| "Industry-standard security" with no Art. 32 reference | Cite Article 32 and describe the actual measures |
|
|
159
157
|
| Says it's giving legal advice / the policy is safe to publish unreviewed | Flag for qualified privacy counsel / DPO every time |
|
|
160
158
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
- `references/privacy-policy-blueprint.md` — Art. 13/14 mandatory-disclosure sections as `[BRACKET]` fill-ins, each with a "why required" line.
|
|
164
|
-
- `references/dpa-and-transfers.md` — Art. 28 demand/offer clause table, 2021 SCC module picker, TIA skeleton, DPF note, sub-processor change-notice clause.
|
|
165
|
-
- `references/dsar-and-consent.md` — data-subject-rights runbook, the LIA three-part template, a compliant cookie-banner config shape, and the `verify.sh` banlist rationale.
|
|
166
|
-
|
|
167
|
-
Run `scripts/verify.sh <artifact-file>` over any policy/banner/DPA you emit to catch missing Art. 13/14 tokens, placeholder leftovers, boilerplate-lies, and a banner missing its reject control.
|
|
159
|
+
Run `scripts/verify.sh <artifact-file>` over any policy/banner/DPA you emit to catch missing Art. 13/14 tokens, placeholder leftovers, boilerplate-lies, and a banner missing its reject control (banlist rationale in `references/dsar-and-consent.md`).
|
|
@@ -14,9 +14,9 @@ should_trigger:
|
|
|
14
14
|
- prompt: "Someone emailed asking us to delete all their data — what's our deadline and process?"
|
|
15
15
|
why: DSAR/erasure flow and the one-month statutory clock with exceptions.
|
|
16
16
|
- prompt: "Redacta nuestra política de privacidad conforme al RGPD."
|
|
17
|
-
why:
|
|
17
|
+
why: Drafting the privacy policy under GDPR, asked in Spanish — matched by meaning, not keyword.
|
|
18
18
|
- prompt: "Revisa el banner de cookies del web perquè el rebuig sigui tan fàcil com acceptar."
|
|
19
|
-
why:
|
|
19
|
+
why: Cookie-banner review against the reject-parity rule, asked in Catalan.
|
|
20
20
|
|
|
21
21
|
should_not_trigger:
|
|
22
22
|
- prompt: "Define our internal data retention schedule and data-classification tiers."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: invoicing
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when issuing an invoice, quote, or credit note and moving it draft-to-paid — the legally required VAT fields, gap-free numbering, per-country e-invoicing mandates, dunning overdue ones. NOT recording a paid invoice in the books (that is `bookkeeping`), NOT Stripe SDK plumbing (that is `stripe`), NOT setting the price (that is `pricing`)."
|
|
4
4
|
tags: [invoicing, billing, vat-invoice, dunning, accounts-receivable, e-invoicing, quotes, credit-note]
|
|
5
5
|
recommends: [bookkeeping, stripe, pricing, contracts, proposals, e-signature, webhooks, finance-ops]
|
|
6
6
|
origin: risco
|
|
@@ -8,7 +8,7 @@ origin: risco
|
|
|
8
8
|
|
|
9
9
|
# Invoicing — cut the document, run the lifecycle, get paid
|
|
10
10
|
|
|
11
|
-
You
|
|
11
|
+
You own the billing document and its collection lifecycle: what must be on the page for a tax authority to accept it, how it moves from draft to paid, and how to chase money politely-then-firmly without breaking the law.
|
|
12
12
|
|
|
13
13
|
The whole job is three moves: **cut a valid document → run its lifecycle → get it paid.** Skip the validity step and the customer can't deduct the VAT. Skip the lifecycle and you lose track of who owes what. Skip the chase and you work for free.
|
|
14
14
|
|
|
@@ -39,7 +39,7 @@ Before anything, decide which document you are issuing — they use different nu
|
|
|
39
39
|
| Proforma | A "please-pay-this" preview that is not yet a tax document | Not the invoice series | No — not a fiscal invoice |
|
|
40
40
|
| Credit note / corrective (factura rectificativa) | To cancel or reduce an invoice already sent | Its own corrective series, **referencing the original number** | Reduces an existing obligation |
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
Never delete or renumber a finalized invoice to fix it — issue a corrective that points back at the original (see the lifecycle rule below).
|
|
43
43
|
|
|
44
44
|
## The legally-valid invoice checklist
|
|
45
45
|
|
|
@@ -143,12 +143,3 @@ Quotes follow `draft → finalize (assigns number) → accept`, which auto-gener
|
|
|
143
143
|
| Chasing payment with no statutory basis | Weak, easily ignored | From D+15 cite ECB+8pp interest + EUR 40 fixed cost |
|
|
144
144
|
| Omitting the per-rate VAT breakdown | Customer can't deduct VAT; invalid invoice | Net + rate + VAT amount per rate, plus total |
|
|
145
145
|
| Recording the payment in the books yourself | Wrong skill, double-entry not your job | Hand the paid invoice to `../bookkeeping/SKILL.md` |
|
|
146
|
-
|
|
147
|
-
## Hand-off
|
|
148
|
-
|
|
149
|
-
- Invoice paid → record + reconcile it: `../bookkeeping/SKILL.md`.
|
|
150
|
-
- Need the SDK / webhook plumbing: `../stripe/SKILL.md`, `../webhooks/SKILL.md`.
|
|
151
|
-
- Deciding the amount before you bill: `../pricing/SKILL.md`.
|
|
152
|
-
- The terms the invoice bills against: `../contracts/SKILL.md`.
|
|
153
|
-
- The pre-sale pitch, not the bill: `../proposals/SKILL.md`.
|
|
154
|
-
- Getting it signed: `../e-signature/SKILL.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: linkedin-outreach
|
|
3
|
-
description: "Use when running LinkedIn
|
|
3
|
+
description: "Use when running LinkedIn social selling as a repeatable motion — Sales Navigator saved searches and trigger alerts, weekly request budgets, fixing a low acceptance rate, turning profile views and post engagers into warm threads, logging every touch. NOT the note or DM copy (that is `cold-outreach`), NOT the deal after a reply (that is `sales-pipeline`)."
|
|
4
4
|
tags: [linkedin, social-selling, sales-navigator, outreach, pipeline]
|
|
5
5
|
recommends: [cold-outreach, lead-gen, sales-pipeline, linkedin-strategy, linkedin-content]
|
|
6
6
|
origin: risco
|
|
@@ -8,46 +8,28 @@ origin: risco
|
|
|
8
8
|
|
|
9
9
|
# Linkedin Outreach — The Loop and Its Ledger
|
|
10
10
|
|
|
11
|
-
*You run the LinkedIn social-selling motion and keep its score
|
|
11
|
+
*You run the LinkedIn social-selling motion and keep its score: **who** to touch, **when**, through **what** warm-up, and **how** the loop is run and logged. The thesis is warm-first — engagement before connection, signal before send, ledger before "I'll remember it." The output is a running system plus a touch ledger under `02-DOCS/`, never a finished line of copy: when prose is needed you write the brief and hand it off, then stay in the loop.*
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Boundary
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
The sharpest line is against `../cold-outreach/SKILL.md`, and it splits on message-vs-system:
|
|
16
16
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
- "Build me a 30-min-a-day social-selling routine that turns LinkedIn into pipeline."
|
|
20
|
-
- "My acceptance rate is ~15% — how do I run requests so people actually accept?"
|
|
21
|
-
- "Turn everyone who engaged with my last post into a conversation."
|
|
22
|
-
- "Someone viewed my profile / liked my post — what's the play?"
|
|
23
|
-
- "Log my LinkedIn touches and show me what's converting."
|
|
24
|
-
- "munta'm una rutina de social selling a LinkedIn", "¿cuántas invitaciones puedo enviar por semana?"
|
|
17
|
+
- **A single message** — the connection note (≤300 chars), the DM bump, its wording and per-inbox send cadence → cold-outreach. If the ask is "write this" or "fix this template," it is not yours.
|
|
18
|
+
- **The system** — who to touch, when, the warm-up, the budget, the ledger → here. When both are in play, this skill drives and delegates the copy.
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
The sharpest line is against **cold-outreach**. Hold it:
|
|
29
|
-
|
|
30
|
-
- **A single message** — the connection note (≤300 chars), the DM bump, its wording and per-inbox send cadence → `../cold-outreach/SKILL.md`. If the ask is "write this" or "fix this template," it is not yours.
|
|
31
|
-
- **The system** — who to touch, when, the warm-up, the budget, the ledger → here. When both are in play, **this skill drives and delegates the copy.**
|
|
32
|
-
|
|
33
|
-
Other routes:
|
|
34
|
-
|
|
35
|
-
- Sourcing / scoring the raw prospect list, ICP definition, dedupe → `../lead-gen/SKILL.md`.
|
|
36
|
-
- Running the deal after a reply (stages, forecast, CRM tasks) → `../sales-pipeline/SKILL.md`.
|
|
37
|
-
- Writing/scheduling LinkedIn *posts* → `../linkedin-content/SKILL.md`.
|
|
38
|
-
- Brand growth/positioning strategy → `../linkedin-strategy/SKILL.md`.
|
|
20
|
+
Also not yours: sourcing / scoring the raw prospect list and ICP definition → `../lead-gen/SKILL.md`; the deal after a reply, i.e. stages, forecast, CRM tasks → `../sales-pipeline/SKILL.md`; writing or scheduling LinkedIn *posts* → `../linkedin-content/SKILL.md`; brand growth and positioning → `../linkedin-strategy/SKILL.md`.
|
|
39
21
|
|
|
40
22
|
## The loop
|
|
41
23
|
|
|
42
24
|
Five phases, in order. Each has a *why* and yields one artifact; the artifact gates the next phase. Skipping a phase is how acceptance collapses.
|
|
43
25
|
|
|
44
26
|
1. **Target** — *why:* outreach timed to a reason beats outreach timed to a calendar. → Yields a Sales Nav saved search + trigger alerts (job change, funding, recent post).
|
|
45
|
-
2. **Warm** — *why:* a cold context-free request
|
|
27
|
+
2. **Warm** — *why:* a cold, context-free request is the worst-accepting move you can make; engaging first is what fixes it. → Yields a logged pre-touch (profile view + one genuine comment/like 1–2 days prior).
|
|
46
28
|
3. **Connect** — *why:* the request is the smallest, most rate-limited move; spend it deliberately. → Yields a sent request inside the weekly budget, note-or-no-note chosen by goal.
|
|
47
29
|
4. **Convert** — *why:* an accept is not a conversation; the choreography turns a signal into a warm 1:1. → Yields a thread with a real reply, copy delegated to cold-outreach when needed.
|
|
48
30
|
5. **Log** — *why:* a motion you can't measure you can't repeat or fix. → Yields a row in the `02-DOCS/` ledger with the outcome.
|
|
49
31
|
|
|
50
|
-
Each phase
|
|
32
|
+
Each phase gets a section below; the last one compresses all five into a day.
|
|
51
33
|
|
|
52
34
|
## Target with Sales Navigator
|
|
53
35
|
|
|
@@ -88,7 +70,7 @@ When you do send a note, you do **not** write it here — hand the brief (the ho
|
|
|
88
70
|
| Free | ~100/wk | ~20/weekday, stay under ~80/wk | Pause and warm more if acceptance drops below ~30%. |
|
|
89
71
|
| Premium / Sales Nav | up to ~200/wk | up to ~40/day | Only with strong SSI and acceptance >40%; otherwise treat as free. |
|
|
90
72
|
|
|
91
|
-
|
|
73
|
+
Over the cap, requests get throttled or the account flagged. Below ~30% acceptance you are spraying — go back to phase 2 instead of pushing volume, and withdraw stale pending requests before they pile up.
|
|
92
74
|
|
|
93
75
|
## Engagement → conversation
|
|
94
76
|
|
|
@@ -123,9 +105,7 @@ Buying-signal tells in a thread: they ask about price/timeline, mention an activ
|
|
|
123
105
|
|
|
124
106
|
1. Book the call or send the warm intro.
|
|
125
107
|
2. Log the outcome (`call_booked`) in the ledger.
|
|
126
|
-
3. Hand the thread + context to `../sales-pipeline/SKILL.md
|
|
127
|
-
|
|
128
|
-
**Explicit stop:** this skill never sets deal stages, forecasts, or runs follow-up CRM tasks. The moment a deal exists, it is sales-pipeline's.
|
|
108
|
+
3. Hand the thread + context to `../sales-pipeline/SKILL.md` — the moment a deal exists it is theirs, and you set no stages or forecasts.
|
|
129
109
|
|
|
130
110
|
## The ledger (02-DOCS)
|
|
131
111
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: meeting-notes
|
|
3
|
-
description: "Use when a meeting
|
|
3
|
+
description: "Use when a meeting just ended and a transcript or rough notes must become a record the absent can act on — decisions with their why, actions with an owner and a real date, open questions, a recap inside 24–48h — or to clean an AI-notetaker draft that invented tasks or swapped speakers. NOT the durable ADR with alternatives weighed (that is decision-records)."
|
|
4
4
|
tags: [meeting-notes, action-items, decisions, recap, transcript-cleanup, minutes, standup, business-ops]
|
|
5
5
|
recommends: [decision-records, sop-builder, project-ops, calendar-scheduling, notion-connector, automation-flows, document-processing]
|
|
6
6
|
origin: risco
|
|
@@ -12,16 +12,16 @@ origin: risco
|
|
|
12
12
|
|
|
13
13
|
You own the **point-in-time meeting record**: take a transcript or raw notes, separate signal from noise, and emit a curated artifact — decisions (with rationale), action items (owner + due date), open questions, and a one-screen TL;DR. The output is human-readable judgment, not a code file.
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Not this skill
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
| If the ask is… | Route to |
|
|
18
|
+
|---|---|
|
|
19
|
+
| The **durable decision record** — full rationale, alternatives weighed, reversibility argued, review cadence | [`decision-records`](../decision-records/SKILL.md). This skill *captures* a decision in its meeting context and hands the heavy ADR off; it does not maintain the long-lived artifact |
|
|
20
|
+
| A **reusable step-by-step procedure / runbook** | [`sop-builder`](../sop-builder/SKILL.md). A SOP is a repeatable how-to; meeting notes are a point-in-time record |
|
|
21
|
+
| **Tracking the emitted tasks across a board / sprint** | [`project-ops`](../project-ops/SKILL.md). This skill *emits* action items; their lifecycle is not its job |
|
|
22
|
+
| **Scheduling the meeting, finding a slot, sending the invite** | [`calendar-scheduling`](../calendar-scheduling/SKILL.md) |
|
|
23
|
+
| **Building the integration that pushes notes into Notion/Slack/a tracker** | [`notion-connector`](../notion-connector/SKILL.md) / [`automation-flows`](../automation-flows/SKILL.md) |
|
|
24
|
+
| **Summarizing an arbitrary document that is not a meeting** | [`document-processing`](../document-processing/SKILL.md) |
|
|
25
25
|
|
|
26
26
|
## The capture loop
|
|
27
27
|
|
|
@@ -69,15 +69,11 @@ go/no-go by Jun 12, payments integration is still open.
|
|
|
69
69
|
- Revisit pricing tiers next sync (not in scope today)
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
Four filled versions of this skeleton — decision meeting, standup/sync, retro, 1:1 — plus copy-paste action-item and decision rows are in [`references/templates.md`](references/templates.md).
|
|
73
73
|
|
|
74
74
|
## Action items done right
|
|
75
75
|
|
|
76
|
-
A complete action item is **`verb, owner, by <real date
|
|
77
|
-
|
|
78
|
-
- **Verb-first** — the task starts with what to do: "Draft…", "Spike…", "Send…", "Confirm…".
|
|
79
|
-
- **One named owner** — a person, not "the team" or "we". Shared ownership means nobody owns it.
|
|
80
|
-
- **A real date** — "by Tue Jun 9", not "next week", not "soon", not "ASAP".
|
|
76
|
+
A complete action item is **`verb, owner, by <real date>`**: verb-first ("Draft…", "Spike…", "Send…", "Confirm…"), **one named person** — not "the team", not "we", since shared ownership means nobody owns it — and **a real date** ("by Tue Jun 9", never "next week", "soon", or "ASAP"). Explicit dates and named owners raise completion and ownership. (Umbrex, accessed 2026-06-02.)
|
|
81
77
|
|
|
82
78
|
Bad → Good:
|
|
83
79
|
|
|
@@ -98,7 +94,7 @@ Add **RACI only when ownership is genuinely contested** — a cross-team decisio
|
|
|
98
94
|
For each real decision capture three things:
|
|
99
95
|
|
|
100
96
|
1. **The decision** — what was decided, stated as a fact.
|
|
101
|
-
2. **One sentence of why** — the trade-off or context. (Umbrex / Fellow.app, accessed 2026-06-02.)
|
|
97
|
+
2. **One sentence of why** — the trade-off or context. Every major decision gets one; a decision with no why rots, and six weeks later nobody remembers what trade-off it solved. (Umbrex / Fellow.app, accessed 2026-06-02.)
|
|
102
98
|
3. **Dissent or unresolved issue** — if someone disagreed or it's conditional, note it. A record that hides dissent will be re-litigated.
|
|
103
99
|
|
|
104
100
|
Tag each decision by **reversibility** — `reversible` / `partially-reversible` / `irreversible` — as a single field. Reversible calls can be made fast on imperfect info; irreversible ones warrant slowing down and recording more context, and the tag helps later review. (fs.blog / Reflect OS, accessed 2026-06-02.)
|
|
@@ -109,7 +105,7 @@ Bad → Good:
|
|
|
109
105
|
|---|---|
|
|
110
106
|
| "Decided to use Postgres." | "Adopt Postgres over DynamoDB for the events store. *Why:* relational queries we need; team already knows it. *Reversibility:* partially-reversible. Dissent: none." |
|
|
111
107
|
|
|
112
|
-
When a decision needs the full ADR — alternatives weighed, reversibility argued, a review date — that is `decision-records`' job. Capture it here in context, then hand it off. Don't grow an ADR inside the meeting notes.
|
|
108
|
+
When a decision needs the full ADR — alternatives weighed, reversibility argued, a review date — that is [`decision-records`](../decision-records/SKILL.md)' job. Capture it here in context, then hand it off. Don't grow an ADR inside the meeting notes.
|
|
113
109
|
|
|
114
110
|
## Working with AI transcripts
|
|
115
111
|
|
|
@@ -129,14 +125,7 @@ Recording a conversation carries real legal and confidentiality exposure. (Justi
|
|
|
129
125
|
|
|
130
126
|
- **Announce + get consent before recording.** Roughly a dozen US states require all-party (two-party) consent — per Justia's 50-state survey, CA, CT, DE, FL, IL, MD, MA, MT, NV, NH, PA, WA — but the canonical list is contested (some sources classify MI, OR, or NV differently). Verify the current rule for your jurisdiction; don't assert a fixed count. Under GDPR, recording is data processing — you need a basis and to inform attendees.
|
|
131
127
|
- **A cloud AI notetaker grants a third party access** to the conversation, which can waive privilege. Don't auto-record sensitive or privileged meetings (legal, HR, M&A, incident reviews).
|
|
132
|
-
- **Redact** names, secrets, and confidential details before distribution if the audience is wider than the room.
|
|
133
|
-
|
|
134
|
-
Decision checklist before you record or distribute:
|
|
135
|
-
|
|
136
|
-
- [ ] Is this being recorded? → announce it and get consent first.
|
|
137
|
-
- [ ] Any all-party-consent jurisdiction or EU attendee? → explicit consent, on record.
|
|
138
|
-
- [ ] Sensitive / privileged (legal, HR, M&A)? → don't auto-record; notes by hand, tighter distribution.
|
|
139
|
-
- [ ] Distributing beyond the room? → redact names/secrets first.
|
|
128
|
+
- **Redact** names, secrets, and confidential details before distribution if the audience is wider than the room — and tighten distribution on anything sensitive.
|
|
140
129
|
|
|
141
130
|
## Distribution
|
|
142
131
|
|
|
@@ -162,7 +151,3 @@ Then route, don't fork. Action items → a tracker via [`project-ops`](../projec
|
|
|
162
151
|
| Fork the notes into three places | Versions diverge; people act on the stale one | One canonical home, link don't copy |
|
|
163
152
|
| Invent a missing owner or date | A fabricated commitment is worse than a flagged gap | Flag it as "needs confirmation" — never guess |
|
|
164
153
|
| Bolt RACI onto a standup | Overhead nobody reads; slows a simple sync | RACI only when ownership is genuinely contested |
|
|
165
|
-
|
|
166
|
-
## References
|
|
167
|
-
|
|
168
|
-
- [`references/templates.md`](references/templates.md) — four ready meeting-record templates (decision meeting, standup/sync, retro, 1:1), the full AI-transcript verification checklist, and copy-paste action-item and decision-row formats.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: no-code-app
|
|
3
|
-
description: "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide
|
|
3
|
+
description: "Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide over Airtable or Xano) — picking the platform, modeling the data, keeping usage-metered cost predictable, and planning the exit before lock-in. NOT a hand-written coded app (that is `nextjs`), NOT wiring SaaS tools together with no app UI (that is `automation-flows`)."
|
|
4
4
|
tags: [no-code, low-code, bubble, glide, softr, app-builder, mvp]
|
|
5
5
|
recommends: [nextjs, shopify, wordpress, automation-flows, spreadsheet-ops, notion-connector, stripe]
|
|
6
6
|
origin: risco
|
|
@@ -10,13 +10,9 @@ origin: risco
|
|
|
10
10
|
|
|
11
11
|
You are deciding whether to build an app on a visual platform, which platform, how to model it, and where the wall is. No-code is not "the easy way" — it is a trade: you buy speed-to-first-user and pay it back in logic ceilings and metered cost. Your job is to make that trade with eyes open.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
**Decide the exit before you build the entrance.** If you cannot describe how you would leave, you are not building an MVP — you are building a hostage.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- No-code wins on **speed-to-first-user** — a working app in days, no deploy pipeline. That is the only thing it reliably wins.
|
|
18
|
-
- It dies on **deep conditional logic** and on **scale economics** — many-branch workflows get unmaintainable, and metering turns a $29 bill into a $400 one without warning.
|
|
19
|
-
- ~25-30% of no-code projects get rewritten when they outgrow the tool, at $50K-$250K. ~68% of platforms offer no code export. If you cannot describe how you would leave, you are not building an MVP — you are building a hostage.
|
|
15
|
+
No-code wins on **speed-to-first-user** — a working app in days, no deploy pipeline. That is the only thing it reliably wins. It dies on **deep conditional logic** and on **scale economics**: many-branch workflows get unmaintainable, and metering turns a $29 bill into a $400 one without warning.
|
|
20
16
|
|
|
21
17
|
## Step 0: is no-code even the right tool?
|
|
22
18
|
|
|
@@ -24,9 +20,9 @@ Run this gate before touching any builder. If any line is a clear yes, route out
|
|
|
24
20
|
|
|
25
21
|
| If the user really wants... | Stop and go to |
|
|
26
22
|
| --- | --- |
|
|
27
|
-
| A hand-written app, full control over code | [../nextjs/SKILL.md](../nextjs/SKILL.md) (or react) |
|
|
28
|
-
| A commerce storefront, products + checkout |
|
|
29
|
-
| A content site / blog / CMS |
|
|
23
|
+
| A hand-written app, full control over code | [../nextjs/SKILL.md](../nextjs/SKILL.md) (or [../react/SKILL.md](../react/SKILL.md)) |
|
|
24
|
+
| A commerce storefront, products + checkout | [../shopify/SKILL.md](../shopify/SKILL.md) |
|
|
25
|
+
| A content site / blog / CMS | [../wordpress/SKILL.md](../wordpress/SKILL.md) |
|
|
30
26
|
| To wire SaaS tools together, no app UI | [../automation-flows/SKILL.md](../automation-flows/SKILL.md) |
|
|
31
27
|
| A spreadsheet as the deliverable itself | [../spreadsheet-ops/SKILL.md](../spreadsheet-ops/SKILL.md) |
|
|
32
28
|
| A Notion workspace, not a published app | [../notion-connector/SKILL.md](../notion-connector/SKILL.md) |
|
|
@@ -89,6 +85,8 @@ bookings: { id, customer: ->customers, class: ->classes, status: [pending|paid|
|
|
|
89
85
|
payments: { id, booking: ->bookings, amount, provider_ref } # via stripe
|
|
90
86
|
```
|
|
91
87
|
|
|
88
|
+
Payments in any of these flows: see [../stripe/SKILL.md](../stripe/SKILL.md).
|
|
89
|
+
|
|
92
90
|
## Build logic without footguns
|
|
93
91
|
|
|
94
92
|
The metering model punishes the obvious-but-wrong way of doing things. Build defensively.
|
|
@@ -127,7 +125,7 @@ This is the section everyone skips and everyone regrets. Do it on day 1.
|
|
|
127
125
|
- Logic outgrows the canvas — many-branch conditionals, custom algorithms.
|
|
128
126
|
- Performance — it crawls at real row counts (the 10K-row test).
|
|
129
127
|
- Cost — the metered bill crosses what a real backend + hosting would cost.
|
|
130
|
-
4. **Price the rewrite honestly.**
|
|
128
|
+
4. **Price the rewrite honestly.** ~25-30% of no-code projects get rewritten when they outgrow the tool, at $50K-$250K. Knowing that number is what lets you decide *now* whether to start in code via [../nextjs/SKILL.md](../nextjs/SKILL.md) instead.
|
|
131
129
|
|
|
132
130
|
When two of those triggers fire, stop adding features and start the migration plan — do not keep pouring work into a runtime you are about to leave.
|
|
133
131
|
|
|
@@ -145,9 +143,3 @@ When two of those triggers fire, stop adding features and start the migration pl
|
|
|
145
143
|
| Testing only at demo scale (100 rows) | Load-test at 10x expected rows early | Snappy at 100 can crawl at 10,000 |
|
|
146
144
|
| No export plan, hope you never leave | Export day 1, keep model portable | 68% offer no code export; rewrite is $50K-$250K |
|
|
147
145
|
| Picking Bubble for a simple internal portal | Softr (flat-rate) for portals over data | Predictable cost, no per-write surprise |
|
|
148
|
-
|
|
149
|
-
## References
|
|
150
|
-
|
|
151
|
-
- [references/platform-limits.md](references/platform-limits.md) — 2026 pricing/metering/record-cap cheatsheet (Bubble WU tiers, Glide updates, Softr flat tiers), backend comparison (native/Airtable/Xano), cost-estimation worked examples, and the migrate-off trigger list, with sources and access dates.
|
|
152
|
-
|
|
153
|
-
Payments in any of these flows: see [../stripe/SKILL.md](../stripe/SKILL.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: performance
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when a page or interaction is slow for one user and the fix starts from a measurement — a failing Core Web Vital (LCP, INP, CLS), a heavy JS bundle, wasted re-renders, an over-broad client boundary: profile, attribute the cost to one phase, fix it, re-measure. NOT surviving concurrent load (that is `scaling`), NOT the slow query (that is `postgresdb`)."
|
|
4
4
|
tags: [performance, core-web-vitals, lcp, inp, cls, bundle-size, profiling, react, web-vitals]
|
|
5
5
|
recommends: [scaling, postgresdb, redis, nextjs, react, observability, monitoring]
|
|
6
6
|
profiles: []
|
|
@@ -15,12 +15,7 @@ The whole job in one line: **measure with a profiler → attribute the cost to o
|
|
|
15
15
|
|
|
16
16
|
**Prime directive: no fix without a profile first.** A waterfall, a flame chart, a bundle treemap, or a field CWV number comes before you touch code. The fix you guess is almost never the fix the measurement points at, and a "fast" change that moves a phase nobody was waiting on is wasted work that you then have to maintain.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- TTFB is the bottleneck because of a slow query or an N+1 → name it here, fix it in `../postgresdb/SKILL.md`.
|
|
21
|
-
- You decided *what* to cache to cut a phase, now make the cache race-free → `../redis/SKILL.md`.
|
|
22
|
-
- The problem only appears under concurrent load → `../scaling/SKILL.md`.
|
|
23
|
-
- You need the canonical App-Router / component data pattern, not the perf loop → `../nextjs/SKILL.md`, `../react/SKILL.md`.
|
|
18
|
+
Cross-reference, don't duplicate: the last column of the table below names where each deep fix lives. The one case it has no row for — you decided *what* to cache to cut a phase and now need that cache race-free — is `../redis/SKILL.md`.
|
|
24
19
|
|
|
25
20
|
## Decision table — symptom to first move
|
|
26
21
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: power-automate
|
|
3
|
-
description: "Use when operating Microsoft Power Automate cloud flows
|
|
3
|
+
description: "Use when operating Microsoft Power Automate cloud flows from code — create, enable, update, list or delete via the Dataverse Web API (`workflow` table, category 5) with Entra ID OAuth2, plus run-history debugging. NOT designing the flow definition (that is `automation-flows`), NOT picking a platform by billing model (that is `automation-strategy`)."
|
|
4
4
|
tags: [power-automate, dataverse, microsoft, flows, entra, oauth, mcp, m365, automation]
|
|
5
5
|
recommends: [automation-flows, automation-strategy, api-connector-builder, webhooks]
|
|
6
6
|
profiles: [full]
|
|
@@ -80,7 +80,7 @@ Two load-bearing parts:
|
|
|
80
80
|
- **`definition`** — a Logic Apps workflow definition: `triggers` (exactly one) then `actions`. This is the *design* artifact. Do not invent it from scratch here — get the trigger→actions→branch→error shape from `../automation-flows/SKILL.md`, then drop it into `definition`. Fastest reliable way to get a real one: build the flow once in the maker portal, export the solution, and copy its `clientdata`.
|
|
81
81
|
- **`connectionReferences`** — the map from the definition's connectors to actual connections. **A flow whose connection references are not authorized will not turn on.** In a solution these are connection-reference records the target environment must resolve; unresolved references are the #1 reason a `PATCH statecode=1` "succeeds" but the flow never runs.
|
|
82
82
|
|
|
83
|
-
**The trap:** `clientdata` must be *escaped into a string* before it goes in the request body — a nested object is rejected. In a script, `JSON.stringify(clientDataObject)` and assign the result; do not paste the object raw. Full annotated example in `references/dataverse-web-api.md`.
|
|
83
|
+
**The trap:** `clientdata` must be *escaped into a string* before it goes in the request body — a nested object is rejected. In a script, `JSON.stringify(clientDataObject)` and assign the result; do not paste the object raw. Full annotated example — plus the endpoint cheat-sheet (token, list/filter, create, enable, update, delete, ExportSolution, share), OData headers and error handling — in `references/dataverse-web-api.md`.
|
|
84
84
|
|
|
85
85
|
## Dynamic lifecycle — token → create → validate → enable → manage → delete
|
|
86
86
|
|
|
@@ -128,13 +128,17 @@ curl -s -X DELETE "$PA_DATAVERSE_URL/api/data/v9.2/workflows(<workflowid>)" \
|
|
|
128
128
|
|
|
129
129
|
**Debug a run** — Dataverse's `flowrun` table lists run records but not per-action I/O. To see *which action failed and with what payload*, use FlowStudio MCP: `list_live_flows` → `get_live_flow_runs` → `get_live_flow_run_action_outputs`. See `references/flowstudio-mcp-and-limits.md`.
|
|
130
130
|
|
|
131
|
-
##
|
|
131
|
+
## Boundaries — when it is not a flow you operate here
|
|
132
132
|
|
|
133
|
-
Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Dataverse** and glue Outlook, Teams, SharePoint, Dynamics, and hundreds of connectors.
|
|
133
|
+
Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Dataverse** and glue Outlook, Teams, SharePoint, Dynamics, and hundreds of connectors. This skill is for when the automation genuinely *is* a Power Automate flow you must operate by code. When it isn't:
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
- *"Send this email / read this calendar via Microsoft Graph from my own backend code"* — not a flow at all; build a typed Graph client with `../api-connector-builder/SKILL.md` (there is no first-party MS-Graph skill), or `../google-workspace/SKILL.md` for the Google equivalent. Same route for a general typed client with auth/pagination/backoff — this skill uses the Dataverse endpoints surgically, it does not build a client.
|
|
136
|
+
- *"Power Automate or n8n/Make/Zapier?"* — billing model and constraints decide that: `../automation-strategy/SKILL.md`, before you commit to operating here.
|
|
137
|
+
- *"Receive my flow's HTTP-trigger POST in my app"* — that inbound endpoint is `../webhooks/SKILL.md`; this skill triggers and operates flows, it does not build the receiver.
|
|
136
138
|
|
|
137
|
-
|
|
139
|
+
## Anti-patterns
|
|
140
|
+
|
|
141
|
+
| Anti-pattern | Why it bites | Do instead |
|
|
138
142
|
|---|---|---|
|
|
139
143
|
| Trying to CRUD a **My Flow** by code | Unsupported — silently impossible, not a bug you can fix | Move it into a Dataverse solution, or drive it by hand |
|
|
140
144
|
| `clientdata` sent as a nested object | Request rejected; the column expects an escaped **string** | Serialize (`JSON.stringify`) the definition+connectionReferences before sending |
|
|
@@ -144,13 +148,6 @@ Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Da
|
|
|
144
148
|
| Hardcoding the Dataverse URL / secret | Env-specific, leaks in source | `.env`: `PA_DATAVERSE_URL`, `PA_TENANT_ID`, `PA_CLIENT_ID`, `PA_CLIENT_SECRET` |
|
|
145
149
|
| Assuming the Dataverse path is permanent | Power Platform API is superseding surfaces piecemeal | Re-check `api.powerplatform.com` coverage at author time; the split is fast-moving |
|
|
146
150
|
|
|
147
|
-
## Related skills
|
|
148
|
-
|
|
149
|
-
- **`../automation-flows/SKILL.md`** — design side: what the trigger→actions→branch→error should be, the importable definition. This skill *consumes* that shape as `clientdata.definition`. Design there, operate here.
|
|
150
|
-
- **`../automation-strategy/SKILL.md`** — choosing Power Automate vs n8n/Make/Zapier by billing and constraints. Decide there before you commit to operating here.
|
|
151
|
-
- **`../api-connector-builder/SKILL.md`** — a generic typed REST client with auth/pagination/backoff (including a Dataverse or MS Graph client). This skill uses the Dataverse API surgically; it does not build a general client.
|
|
152
|
-
- **`../webhooks/SKILL.md`** — building the inbound endpoint in *your* app that receives a flow's HTTP-trigger POST. This skill triggers/operates flows; it does not build the receiver.
|
|
153
|
-
|
|
154
151
|
## Checklist
|
|
155
152
|
|
|
156
153
|
- [ ] `.env` set: `PA_DATAVERSE_URL` (no trailing slash), `PA_TENANT_ID`, `PA_CLIENT_ID`, `PA_CLIENT_SECRET`.
|
|
@@ -161,9 +158,3 @@ Power Automate is Microsoft's iPaaS across M365 and Dynamics; flows live in **Da
|
|
|
161
158
|
- [ ] Flow enabled via `PATCH statecode=1` and verified on read-back.
|
|
162
159
|
- [ ] Solution **exported** before any `DELETE`.
|
|
163
160
|
- [ ] No secrets or org URLs hardcoded; FlowStudio MCP (if used) flagged as third-party.
|
|
164
|
-
|
|
165
|
-
## References
|
|
166
|
-
|
|
167
|
-
- `references/dataverse-web-api.md` — endpoint cheat-sheet (token, list/filter, create, enable, update, delete, ExportSolution, share), the full annotated `clientdata`, OData headers, and error handling.
|
|
168
|
-
- `references/entra-auth-setup.md` — app registration, service principal vs delegated user, the Dataverse application user + security role, `.default` vs `user_impersonation`, and common 401/403 causes.
|
|
169
|
-
- `references/flowstudio-mcp-and-limits.md` — FlowStudio MCP tools and auth (third-party), what it exposes that Dataverse doesn't, and the platform limits (My Flows, `api.flow.microsoft.com`, Power Platform API evolution).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: react-native
|
|
3
|
-
description: "Use when writing the JS/TS
|
|
3
|
+
description: "Use when writing the JS/TS inside a React Native or Expo app — screens, Expo Router navigation, lists, Reanimated gestures, platform forks, offline state, native modules — or killing jank and render storms. NOT eas build/submit/OTA/config-plugin (that is `expo`), NOT a Dart app (that is `flutter`), NOT web React/DOM (that is `react` or `nextjs`)."
|
|
4
4
|
tags: [react-native, expo, mobile, ios, android, navigation, performance]
|
|
5
5
|
recommends: [expo, react, flutter, design, debug, performance]
|
|
6
6
|
origin: risco
|
|
@@ -8,11 +8,7 @@ origin: risco
|
|
|
8
8
|
|
|
9
9
|
# React Native (app code)
|
|
10
10
|
|
|
11
|
-
You write the code that runs *inside* the app: render, navigate, animate, list, persist, and author native modules.
|
|
12
|
-
|
|
13
|
-
## What this skill owns
|
|
14
|
-
|
|
15
|
-
Mobile is split across two skills by **verb**. Run the verb test before doing anything:
|
|
11
|
+
You write the code that runs *inside* the app: render, navigate, animate, list, persist, and author native modules. Mobile is split across two skills by **verb** — run the verb test before doing anything:
|
|
16
12
|
|
|
17
13
|
| Verb in the request | Skill |
|
|
18
14
|
|---|---|
|
|
@@ -149,7 +145,7 @@ Use Reanimated 4 CSS animations for simple declarative cases (fades, simple tran
|
|
|
149
145
|
|
|
150
146
|
- Small forks: `Platform.select({ ios: 12, android: 8 })` or `Platform.OS === 'ios'`.
|
|
151
147
|
- Whole-component forks: `Button.ios.tsx` / `Button.android.tsx` — the bundler picks the right one; import `./Button` with no extension.
|
|
152
|
-
- Safe area: use `react-native-safe-area-context` insets, not hardcoded notch padding. Why: insets differ per device and orientation.
|
|
148
|
+
- Safe area: use `react-native-safe-area-context` insets, not hardcoded notch padding. Why: insets differ per device and orientation. Palette, type scale and layout intent are not decided here → `../design/SKILL.md`.
|
|
153
149
|
- `KeyboardAvoidingView` behaves differently per platform — `padding` on iOS, often `height` or nothing on Android; test both, don't assume the iOS behavior ports.
|
|
154
150
|
- Set the status bar style explicitly per screen via `expo-status-bar`.
|
|
155
151
|
|
|
@@ -196,6 +192,7 @@ Full Expo Module (Swift + Kotlin + view), the Turbo Module codegen-spec walkthro
|
|
|
196
192
|
- Read **Hermes** stack traces from the bottom up; the JS frame that matters is usually above the native bridge frames.
|
|
197
193
|
- "Works on iOS, breaks on Android" (or vice versa) → run the platform-divergence checklist in `references/performance-debugging.md` before guessing.
|
|
198
194
|
- A red screen citing the interop layer is usually an old-architecture lib running under Fabric — update the lib or find a New-Arch-ready replacement; do **not** disable New Arch.
|
|
195
|
+
- A fault that resists all of the above needs systematic isolation, not more guesses → `../debug/SKILL.md`.
|
|
199
196
|
|
|
200
197
|
## Anti-patterns
|
|
201
198
|
|
|
@@ -211,10 +208,3 @@ Full Expo Module (Swift + Kotlin + view), the Turbo Module codegen-spec walkthro
|
|
|
211
208
|
| Index as list key | Breaks recycling, reorders rows on insert | Stable domain id |
|
|
212
209
|
| Doing native config / `eas.json` / OTA here | Wrong skill; this is app code | `../expo/SKILL.md` |
|
|
213
210
|
| Hardcoded notch/safe-area padding | Wrong on other devices/orientations | `react-native-safe-area-context` insets |
|
|
214
|
-
|
|
215
|
-
## Cross-references
|
|
216
|
-
|
|
217
|
-
- Building, signing, OTA, native config → `../expo/SKILL.md`
|
|
218
|
-
- Dart cross-platform alternative → `../flutter/SKILL.md`
|
|
219
|
-
- Layout/visual design decisions → `../design/SKILL.md`
|
|
220
|
-
- Systematic runtime fault isolation → `../debug/SKILL.md`
|
|
@@ -42,6 +42,7 @@ flag() { # message + matching lines
|
|
|
42
42
|
findings=1
|
|
43
43
|
printf '%s[finding]%s %s\n' "$YELLOW" "$RESET" "$1"
|
|
44
44
|
[ -n "${2:-}" ] && printf '%s\n' "$2" | sed 's/^/ /'
|
|
45
|
+
return 0 # never let a message-only finding trip set -e and skip the remaining checks
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
md_files() { # SKILL.md + every references/*.md
|
|
@@ -86,11 +87,13 @@ if [ -n "$bare" ]; then
|
|
|
86
87
|
done < "$SKILL"
|
|
87
88
|
fi
|
|
88
89
|
|
|
89
|
-
# 4) Description
|
|
90
|
+
# 4) Description shape: a "Use when/to" lead, a NOT-boundary, and no keyword trigger list
|
|
91
|
+
# (the model matches by meaning; a phrase list is per-turn cost for every install).
|
|
90
92
|
desc="$(grep -m1 -E '^description:' "$SKILL" 2>/dev/null || true)"
|
|
91
93
|
if [ -n "$desc" ]; then
|
|
92
|
-
printf '%s' "$desc" | grep -
|
|
94
|
+
printf '%s' "$desc" | grep -qE 'Use (when|to) ' || flag "description does not open with 'Use when/to'"
|
|
93
95
|
printf '%s' "$desc" | grep -qE 'NOT ' || flag "description missing a 'NOT <x> (that is <sibling>)' boundary"
|
|
96
|
+
printf '%s' "$desc" | grep -q 'Triggers:' && flag "description carries a 'Triggers:' keyword list -> delete it, the model matches by meaning" ""
|
|
94
97
|
fi
|
|
95
98
|
|
|
96
99
|
# 5) No cross-ref to a sibling that does not exist on disk next to this skill.
|
package/skills/roast-me/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: roast-me
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when someone wants an honest, comedic audit of their own prompting — reads their past agent transcripts, scores prompt quality and compute efficiency, names their worst habits, builds a model-selection cheat sheet. NOT reviewing code an agent produced (that is `code-review`), NOT prompting technique in general (that is `prompt-engineering`)."
|
|
4
4
|
tags: [prompting, self-audit, compute-efficiency, ai-hygiene, learning]
|
|
5
5
|
recommends: [prompt-engineering, code-review, context-budget]
|
|
6
6
|
profiles: [full]
|
|
@@ -9,7 +9,7 @@ origin: risco
|
|
|
9
9
|
|
|
10
10
|
# roast-me — audit your prompting, score yourself, stop burning money
|
|
11
11
|
|
|
12
|
-
You are the **prompt auditor**. Your target is not the user's code — it is their *prompting behaviour
|
|
12
|
+
You are the **prompt auditor**. Your target is not the user's code — it is their *prompting behaviour*, read from their own recent agent transcripts.
|
|
13
13
|
|
|
14
14
|
Every run follows five phases. Execute them in order.
|
|
15
15
|
|
|
@@ -115,9 +115,7 @@ Score History:
|
|
|
115
115
|
2026-06-08 73/100 (C) +5↑ 35/100 (F) The 3W Rule
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
-
Output the roast report as formatted markdown.
|
|
119
|
-
|
|
120
|
-
Done.
|
|
118
|
+
Output the roast report as formatted markdown.
|
|
121
119
|
|
|
122
120
|
## Orientación (siempre)
|
|
123
121
|
|
|
@@ -9,7 +9,7 @@ skill: roast-me
|
|
|
9
9
|
|
|
10
10
|
should_trigger:
|
|
11
11
|
- prompt: "Roast me."
|
|
12
|
-
why: "Canonical
|
|
12
|
+
why: "Canonical invocation — the shortest possible ask for exactly this skill's job. Must fire immediately and run the five-phase pipeline."
|
|
13
13
|
|
|
14
14
|
- prompt: "Audit my prompting habits over the last two weeks."
|
|
15
15
|
why: "Situation-first phrasing with a custom time window — roast-me owns both the 'audit prompting' job and the --days N parameter."
|
|
@@ -18,10 +18,10 @@ should_trigger:
|
|
|
18
18
|
why: "Dual concern (prompt quality + cost) phrased as a question — maps directly to the two scores roast-me produces. No mention of 'roast' keyword."
|
|
19
19
|
|
|
20
20
|
- prompt: "Analiza mis prompts de la última semana y dime dónde soy malo."
|
|
21
|
-
why: "Spanish-language
|
|
21
|
+
why: "Spanish-language request — rsc users write Spanish; routing must survive translation on meaning alone."
|
|
22
22
|
|
|
23
23
|
- prompt: "Puntua els meus prompts i digue'm quins hàbits hauria de canviar."
|
|
24
|
-
why: "Catalan-language
|
|
24
|
+
why: "Catalan-language request — a non-obvious language variant that must route on meaning, with no keyword resembling the skill id."
|
|
25
25
|
|
|
26
26
|
- prompt: "How much am I burning on model costs? Show me where I overspend."
|
|
27
27
|
why: "Compute-efficiency angle only, no prompting-quality framing — roast-me's compute score and cheat sheet are the direct answer."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: shortform-strategy
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when the unit of work is a TikTok/Reels account, not one clip: positioning, sustainable cadence and format mix, ride-or-skip on a trend or sound, recurring series, diagnosing a flat account, and the dated learning loop. NOT the single script or hook variants (that is `video-shorts`), NOT the idea backlog (that is `shortform-ideation`)."
|
|
4
4
|
tags: [short-form-video, tiktok, instagram-reels, account-growth, positioning, posting-cadence, trends, series, algorithm-2026]
|
|
5
5
|
recommends: [video-shorts, shortform-ideation, shortform-packaging, shortform-editing, social-publisher, content-engine, brand-voice, analytics]
|
|
6
6
|
origin: risco
|
|
@@ -12,9 +12,9 @@ origin: risco
|
|
|
12
12
|
|
|
13
13
|
Hand off downstream the moment the deliverable becomes *one video*:
|
|
14
14
|
- The 15–60s script and hook variants → `../video-shorts/SKILL.md`.
|
|
15
|
-
- The topic/angle backlog feeding the account →
|
|
16
|
-
- The cover frame / on-screen title / first-frame packaging →
|
|
17
|
-
- The cut, caption burn-in, sound sync →
|
|
15
|
+
- The topic/angle backlog feeding the account → `../shortform-ideation/SKILL.md`.
|
|
16
|
+
- The cover frame / on-screen title / first-frame packaging → `../shortform-packaging/SKILL.md`.
|
|
17
|
+
- The cut, caption burn-in, sound sync → `../shortform-editing/SKILL.md`.
|
|
18
18
|
- Cross-platform calendar/scheduler across X/LinkedIn/Threads → `../social-publisher/SKILL.md`.
|
|
19
19
|
- The top-down editorial system across all content types → `../content-engine/SKILL.md`.
|
|
20
20
|
- The durable tone the account speaks in → `../brand-voice/SKILL.md`.
|
|
@@ -101,7 +101,7 @@ Design it as a *contract with the viewer*:
|
|
|
101
101
|
- **Fix a cadence** — same slot, same rhythm (e.g. every Tuesday). A series with no schedule is just a hashtag.
|
|
102
102
|
- **Pilot before committing.** Use **Trial Reels** (public IG accounts, 1,000+ followers, available since July 2025) to publish the pilot to non-followers first and read the signal before showing your existing audience — a built-in A/B surface for a format bet (later.com; socialpilot.co — accessed 2026-06-02).
|
|
103
103
|
|
|
104
|
-
The hand-off: you define the series *concept, cadence, and numbering*. The episodes get ideated (shortform-ideation), scripted (`../video-shorts/SKILL.md`), and packaged (shortform-packaging) elsewhere.
|
|
104
|
+
The hand-off: you define the series *concept, cadence, and numbering*. The episodes get ideated (`../shortform-ideation/SKILL.md`), scripted (`../video-shorts/SKILL.md`), and packaged (`../shortform-packaging/SKILL.md`) elsewhere.
|
|
105
105
|
|
|
106
106
|
## The learning loop — log, review, write back
|
|
107
107
|
|
|
@@ -152,21 +152,9 @@ timestamp: 2026-06-02T10:00:00Z
|
|
|
152
152
|
|
|
153
153
|
## Persist it
|
|
154
154
|
|
|
155
|
-
Write the account's brain back so it compounds (mirrors the harness Karpathy-wiki convention). The `shortform/` wiki tree is an **OKF v0.1 bundle** shared with the
|
|
156
|
-
|
|
157
|
-
- `02-DOCS/wiki/shortform/strategy.md` — positioning, cadence/mix, KPI, length bands, current series. Lead with frontmatter; the body keeps the H1 + sections the linter checks:
|
|
158
|
-
|
|
159
|
-
```markdown
|
|
160
|
-
---
|
|
161
|
-
type: shortform-strategy
|
|
162
|
-
title: Shortform account strategy
|
|
163
|
-
tags: [shortform, strategy, positioning, cadence]
|
|
164
|
-
timestamp: 2026-06-02T10:00:00Z
|
|
165
|
-
---
|
|
166
|
-
# Shortform account strategy
|
|
167
|
-
...
|
|
168
|
-
```
|
|
155
|
+
Write the account's brain back so it compounds (mirrors the harness Karpathy-wiki convention). The `shortform/` wiki tree is an **OKF v0.1 bundle** shared with the `../tiktok-api/SKILL.md` and `../shortform-packaging/SKILL.md` siblings: every `.md` written here carries YAML frontmatter with a non-empty `type`, cross-references are standard markdown links (never `[[wikilinks]]`), and `decisions.md` follows the OKF newest-first append-log rule.
|
|
169
156
|
|
|
157
|
+
- `02-DOCS/wiki/shortform/strategy.md` — positioning, cadence/mix, KPI, length bands, current series. Same frontmatter shape as above with `type: shortform-strategy`, then the H1 (`# Shortform account strategy`) and the sections the linter checks.
|
|
170
158
|
- `02-DOCS/wiki/shortform/decisions.md` — the dated decision log, OKF append-log (`type: shortform-decision-log`, newest block on top; format above).
|
|
171
159
|
- `02-DOCS/raw/shortform/metrics.csv` — the per-post ledger (schema in `references/learning-loop-template.md`). This is `raw/`, not `wiki/` — a CSV, no frontmatter.
|
|
172
160
|
|