@ericrisco/rsc 0.1.47 → 0.1.49

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: financial-model
3
- description: "Use when a founder needs the multi-period, driver-based projection that raises a round and steers the company — build 3-year projections, model revenue + costs + headcount + runway, size the raise, or stress-test scenarios. Triggers: 'build a financial model for our seed', 'model our revenue costs and runway', 'when do we run out of cash', 'how much should we raise to get 24 months', 'what runway does $2M buy us', 'model the hiring plan's effect on burn', 'add a downside scenario if we miss plan by 30%', 'modelo financiero a 3 años', 'cuánto runway nos da la ronda', 'model financer i projeccions', 'quant de pista de despegament'. The engine is assumptions → revenue/cost/headcount builds → cash/burn/runway/scenarios, 18–36 months forward, every output a formula. NOT the next-13-weeks liquidity reconciled to the actual bank balance (that is finance-ops), NOT the isolated LTV/CAC math (that is unit-economics, which this model consumes as drivers), NOT the slide story (that is pitch-deck)."
3
+ description: "Use when a founder needs the driver-based 18–36 month projection: revenue, cost and headcount builds resolving to net burn, runway, cash-out date, scenarios and the raise size. NOT the 13-week bank-reconciled cash view (that is `finance-ops`), NOT single-series forecasting (that is `forecasting`), NOT running the round (that is `fundraising`)."
4
4
  tags: [financial-model, projections, runway, burn-rate, fundraising, fp-and-a, forecast]
5
5
  recommends: [finance-ops, unit-economics, pricing, forecasting, pitch-deck, investor-materials, fundraising]
6
6
  origin: risco
@@ -8,7 +8,7 @@ origin: risco
8
8
 
9
9
  # Financial model — the projection engine that raises and steers
10
10
 
11
- You are a startup FP&A analyst building the **projection engine**: an assumptions layer that feeds a monthly revenue build, a cost build (COGS + OpEx by function + a headcount plan), and a cash projection that resolves to **net burn, runway, and the cash-out date** — plus a scenario switch (base / downside / upside). It is forward-looking and assumption-driven, 18–36 months out. It is not the controller's short-horizon liquidity tool, not the deck narrative, not the LTV/CAC deep dive. It produces the numbers the fundraising siblings present.
11
+ You are a startup FP&A analyst building the **projection engine**: an assumptions layer that feeds a monthly revenue build, a cost build (COGS + OpEx by function + a headcount plan), and a cash projection that resolves to **net burn, runway, and the cash-out date** — plus a scenario switch (base / downside / upside). It is forward-looking and assumption-driven, 18–36 months out. It produces the numbers the fundraising siblings present.
12
12
 
13
13
  The test of a model is not "does it look right" but **"does it re-flow when I change three input cells."** A spreadsheet of typed-in numbers is a picture, not a model.
14
14
 
@@ -20,18 +20,21 @@ Three connected artifacts, every output traced to an input:
20
20
  2. **A monthly projection grid** (CSV/spreadsheet, 18–36 columns) — month index, revenue, COGS, gross margin, OpEx by function, headcount, net burn, starting/ending cash, runway-months. This is what `scripts/verify.sh` checks for shape and internal consistency.
21
21
  3. **A scenario + runway summary** — one screen: ending-cash trajectory and runway under base/downside/upside, the raise number, and the burn-multiple / Rule-of-40 cross-check.
22
22
 
23
- ## What it does NOT do — route out first
23
+ ## Route out first
24
24
 
25
- This skill answers **"how much / what runway / does the plan tie out."** The moment the real ask is something else, stop and route:
25
+ This skill answers **"how much / what runway / does the plan tie out."** The moment the real ask is something else, stop and route — at the intake gate or mid-build:
26
26
 
27
- - Next-13-weeks liquidity reconciled to the **actual bank balance**, this-month burn, are-we-solvent-now → `finance-ops`.
28
- - Recording actual ledger entries, journals, double-entry, payroll postings → `bookkeeping`.
29
- - The isolated **LTV / CAC / payback / contribution-margin** math → `unit-economics` (the model imports these as drivers, it does not derive them).
30
- - Setting the **price / packaging / tier / margin floor** itself → `pricing` (the model takes price as input).
31
- - Statistical / time-series **forecasting** of a single series (churn, demand, ARR) from history → `forecasting`.
32
- - The slide **story** and decision-grade headline numbers → `pitch-deck`. Packaging the model into the data room / sending it → `investor-materials`.
33
- - Round **strategy**, investor pipeline, SAFE-vs-priced, term-sheet mechanics → `fundraising`.
34
- - Per-unit COGS / infra / AI spend as actuals → `cost-tracking`.
27
+ | The real ask | Route to |
28
+ | --- | --- |
29
+ | Next-13-weeks liquidity reconciled to the **actual bank balance**, this-month burn, are-we-solvent-now | `finance-ops` |
30
+ | Recording actual ledger entries, journals, double-entry, payroll postings | `bookkeeping` |
31
+ | The isolated **LTV / CAC / payback / contribution-margin** math — the model imports these as drivers, it does not derive them | `unit-economics` |
32
+ | Setting the **price / packaging / tier / margin floor** itself — the model takes price as input | `pricing` |
33
+ | Statistical / time-series **forecast** of a single series (churn, demand, ARR) from history | `forecasting` |
34
+ | The slide **story** and decision-grade headline numbers | `pitch-deck` |
35
+ | Packaging the model into the data room / sending it | `investor-materials` |
36
+ | Round **strategy**, investor pipeline, SAFE-vs-priced, term-sheet mechanics | `fundraising` |
37
+ | Per-unit COGS / infra / AI spend as actuals | `cost-tracking` |
35
38
 
36
39
  ## The intake gate
37
40
 
@@ -44,12 +47,6 @@ Pin four inputs before you build a single cell. Without them the model is fictio
44
47
  | **Current revenue / MRR + recent growth** | the base the revenue build grows from, not a fresh hockey stick |
45
48
  | **Target raise & horizon** (or "size it for me") | the model either takes the raise as input or solves for it from a runway target |
46
49
 
47
- STOP-and-route at the gate:
48
-
49
- - If the ask is "what does next quarter's cash look like against the bank" → that is the 13-week tool, route to `finance-ops`.
50
- - If the ask is "what's our LTV and CAC" with no projection attached → route to `unit-economics`; come back when you need them as drivers.
51
- - If the ask is "what should we charge" → route to `pricing`; the model takes the price it sets.
52
-
53
50
  ## Rule 1 — three layers, no hardcoded outputs
54
51
 
55
52
  The model is a connected system: **assumptions → drivers → outputs.** Changing a few input cells must re-flow the whole plan. Hardcoded outputs that don't recompute are the cardinal modeling sin — they pass inspection and then silently lie the moment an assumption moves.
@@ -131,7 +128,7 @@ Most companies miss Rule of 40 — McKinsey's run of 200+ software firms (2011
131
128
 
132
129
  ## Anti-patterns
133
130
 
134
- | Bad | Good | Why |
131
+ | Anti-pattern | Do instead | Why |
135
132
  | --- | --- | --- |
136
133
  | Hockey-stick revenue, one line, no downside | base / downside / upside off toggled drivers | investors stress-test the downside first; no downside reads as naive |
137
134
  | Runway computed from net income / P&L | runway from cash balance ÷ net cash burn | depreciation, prepaids, AR make profit ≠ cash; cash is the survival line |
@@ -152,19 +149,4 @@ The model emits a checkable artifact, so `scripts/verify.sh` runs against your g
152
149
  ./scripts/verify.sh --strict # treat warnings as failures (CI gate)
153
150
  ```
154
151
 
155
- It checks: required columns present (month, revenue, cogs, gross_margin, opex, net_burn, ending_cash, runway_months); **cash continuity** (ending_cash[m] == starting_cash[m+1]); **gross_margin == (revenue − COGS)/revenue** recomputes; **net_burn == gross_burn − revenue** ties; runway_months ties to cash ÷ net_burn; ≥1 scenario present; and a defect lint for placeholders (`TBD`, `XX`, `#REF`, `[assumption]`) and impossible values (gross margin >100%/<−100%, negative headcount). It exits 0 on a clean or empty target — a missing file is a skip, never a false failure. The schema it enforces is documented in `references/model-structure.md`.
156
-
157
- ## Hand-offs
158
-
159
- - Need the LTV/CAC/payback that feed the drivers → `unit-economics`.
160
- - Price/packaging the model assumes → `pricing`.
161
- - Single-series statistical forecast of churn/ARR → `forecasting`.
162
- - The near-term bank-reconciled cash view → `finance-ops`.
163
- - Turn the numbers into the slide story → `pitch-deck`; into the data room → `investor-materials`.
164
- - Run the actual round off the raise number → `fundraising`.
165
-
166
- ## references/
167
-
168
- - `references/revenue-build.md` — bottom-up funnel template, the MRR new/expansion/contraction/churn waterfall, the top-down TAM cross-check, and a worked monthly build.
169
- - `references/benchmarks-and-scenarios.md` — the 2025/26 benchmark sanity-table, the base/downside/upside driver-toggle recipe, and a worked runway-under-scenarios example.
170
- - `references/model-structure.md` — the assumptions/projection row+column contract `verify.sh` enforces, the cash-continuity rule, and the `model.csv` schema with a filled mini-example.
152
+ It checks: required columns present (month, revenue, cogs, gross_margin, opex, net_burn, ending_cash, runway_months); **cash continuity** (ending_cash[m] == starting_cash[m+1]); **gross_margin == (revenue − COGS)/revenue** recomputes; **net_burn == gross_burn − revenue** ties; runway_months ties to cash ÷ net_burn; ≥1 scenario present; and a defect lint for placeholders (`TBD`, `XX`, `#REF`, `[assumption]`) and impossible values (gross margin >100%/<−100%, negative headcount). It exits 0 on a clean or empty target — a missing file is a skip, never a false failure. The row+column contract it enforces, the cash-continuity rule, and the `model.csv` schema with a filled mini-example are in `references/model-structure.md`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: finetuning
3
- description: "Use when adapting an open-weight model to a target FORM or BEHAVIOR — tone, output format, domain style, a reasoning/tool-calling pattern — via LoRA/QLoRA or full fine-tuning with TRL SFTTrainer and then preference optimization (DPO/ORPO/KTO/GRPO); when choosing fine-tune vs prompt vs RAG vs longer context; when setting LoRA r/alpha/target_modules; when eval loss climbs while train loss keeps falling; when the adapter seems to have learned nothing; when inference outputs garbage after a run. Triggers: 'fine-tune Llama/Qwen on our data', 'LoRA vs QLoRA vs full fine-tune', 'SFT then DPO/ORPO/KTO/GRPO', 'set target_modules / rank / alpha', 'my fine-tune overfits', 'the model forgot everything after training', 'write a GRPO reward function', 'ajustar un modelo amb LoRA amb les nostres dades'. NOT adding facts or fresh knowledge to a model (that is rag); NOT the fast single-GPU Unsloth backend or GGUF export (that is unsloth); NOT serving the trained model (that is vllm)."
3
+ description: "Use when adapting an open-weight model to a target form or behavior — tone, output format, reasoning pattern — via LoRA/QLoRA or full fine-tuning with TRL SFTTrainer, then preference optimization (DPO/ORPO/KTO/GRPO), and for fine-tune vs prompt vs RAG. NOT adding facts to a model (that is rag); NOT the single-GPU Unsloth backend or GGUF export (that is unsloth)."
4
4
  tags: [finetuning, lora, qlora, sft, dpo, grpo, peft, trl, preference-optimization]
5
5
  recommends: [training-data, unsloth, open-weights, huggingface, vllm, rag]
6
6
  origin: risco
@@ -33,8 +33,10 @@ row below is a real off-ramp.
33
33
 
34
34
  Route out explicitly. Facts / freshness / citations → `../rag/SKILL.md`. Squeezing a prompt before
35
35
  spending money → `prompt-engineering`. Picking *which* base model (size/license/task) → `open-weights`.
36
- Building the JSONL/preference corpus → `training-data`. A fast single-GPU run + GGUF export →
37
- `../unsloth/SKILL.md`. Serving the result → `../vllm/SKILL.md`.
36
+ Building the JSONL/preference corpus → `training-data` (LLM corpora, NOT tabular cleaning — that is
37
+ `data-cleaning`). A fast single-GPU run + GGUF export → `../unsloth/SKILL.md` (same LoRA/QLoRA
38
+ concepts, one optimized implementation; this skill stays backend-agnostic). Downloading the base or
39
+ pushing the adapter/merged model → `huggingface`. Serving the result → `../vllm/SKILL.md`.
38
40
 
39
41
  > The cheapest fine-tune is the one you didn't need. Prompt + RAG solves most "make it behave"
40
42
  > asks at zero training cost and updates instantly. Fine-tune when that ceiling is real, measured,
@@ -201,6 +203,8 @@ score). Judge the run on that, plus **eval loss**.
201
203
  eval; keep the held-out set quarantined. (Corpus-side hygiene is `training-data`.)
202
204
  - General LLM/agent eval harness and judging → `agent-eval`. Bring your task metric here.
203
205
 
206
+ The full tuning + forgetting + evaluation playbook is in `references/hyperparameters-and-eval.md`.
207
+
204
208
  ## When NOT to fine-tune (anti-patterns)
205
209
 
206
210
  | Anti-pattern | Why it breaks | Do instead |
@@ -214,19 +218,6 @@ score). Judge the run on that, plus **eval loss**.
214
218
  | A few dozen examples for full FT | Not enough signal; unstable | Curate ~hundreds–thousands (LIMA) or use LoRA |
215
219
  | Fine-tune a model you can't legally deploy | License blocks your use case | Check the model card first → `open-weights` |
216
220
 
217
- ## Related skills
218
-
219
- - **`../rag/SKILL.md`** — the fork of the decision gate: facts/freshness/citations live there;
220
- form/behavior lives here. Most "make it behave" asks are RAG or prompting, not training.
221
- - **`prompt-engineering`** — the cheaper lever to exhaust before spending a GPU.
222
- - **`training-data`** — builds/validates the JSONL `messages` and preference-pair corpus you feed
223
- here (LLM corpora, NOT tabular cleaning — that is `data-cleaning`).
224
- - **`open-weights`** — chooses *which* base model by task/size/license; you consume that choice.
225
- - **`../unsloth/SKILL.md`** — a fast single-GPU training backend + GGUF export; same LoRA/QLoRA
226
- concepts, one optimized implementation. This skill stays backend-agnostic.
227
- - **`huggingface`** — download the base, push the adapter/merged model, host inference (NOT training).
228
- - **`../vllm/SKILL.md`** — serves the trained/merged model (adapter hot-swap, throughput flags).
229
-
230
221
  ## Checklist
231
222
 
232
223
  - [ ] Ran the decision gate: confirmed this is a form/behavior need, not a facts need (else → rag).
@@ -239,6 +230,3 @@ score). Judge the run on that, plus **eval loss**.
239
230
  - [ ] Trained 1–3 epochs; watched **eval** loss (not train) for the overfitting turn.
240
231
  - [ ] Preference stage only if needed; correct method for the data (pairs→DPO/ORPO, votes→KTO, verifier→GRPO); tiny LR.
241
232
  - [ ] Verified `trl`/`peft`/`transformers` current majors and import paths at author time.
242
-
243
- See `references/methods.md` for full SFT→DPO/GRPO/ORPO/KTO scripts, dataset schemas, and adapter
244
- merging; `references/hyperparameters-and-eval.md` for the tuning + forgetting + evaluation playbook.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: firebase
3
- description: "Use when building on Firebase — modeling Firestore data, writing or auditing Security Rules, wiring Auth, shipping Cloud Functions, storing files in Cloud Storage, or choosing modular Web/Admin SDK imports — and when symptoms appear like 'my database is open to the internet', 'rules reject my query', a counter stuck at 1 write/sec, custom-claim RBAC, or a callable function. Triggers: 'firestore.rules audit', 'denormalize for read paths', 'collection vs subcollection', 'my query works in the emulator but fails in prod with requires-an-index', 'set a custom admin claim', 'regles de seguretat de Firestore', 'mi base de datos está abierta a internet'. NOT managed-Postgres BaaS with SQL and RLS (that is supabase)."
3
+ description: "Use when building on Firebase — Firestore data modeling, Security Rules, Auth and custom claims, Cloud Functions, Storage, modular Web/Admin SDK imports — including symptoms like a database open to the internet, a query rejected by rules, or a doc stuck at ~1 write/sec. NOT managed-Postgres BaaS with SQL and RLS (that is supabase)."
4
4
  tags: [firebase, firestore, security-rules, cloud-functions, auth]
5
5
  recommends: [secure-coding, gcp-essentials, nextjs]
6
6
  origin: risco
@@ -8,43 +8,29 @@ origin: risco
8
8
 
9
9
  # Firebase — Firestore, Rules, Auth, Functions, Storage
10
10
 
11
- Build correctly on the Firebase product surface that sits on top of GCP: model Firestore data,
12
- write and test Security Rules, wire Auth, ship Cloud Functions, and store files — all on the
13
- modular Web SDK (v12) and the Admin SDK. The whole skill exists to stop two failure modes: dragging
14
- relational/SQL habits into a NoSQL document store, and leaving the database open to the internet.
11
+ The Firebase product surface that sits on top of GCP, on the modular Web SDK (v12) and the Admin SDK.
12
+ The whole skill exists to stop two failure modes: dragging relational/SQL habits into a NoSQL
13
+ document store, and leaving the database open to the internet.
15
14
 
16
- Hold these three facts the entire time:
15
+ Two facts drive everything below:
17
16
 
18
- - **It is a NoSQL document store.** No joins, no server-side `OR` across different fields without a
19
- composite index, no `SELECT *` across collections. You shape data for the read path, not for
20
- normalization.
17
+ - **It is a NoSQL document store, shaped for the read path.** No joins, no server-side `OR` across
18
+ different fields without a composite index, no `SELECT *` across collections. Denormalize and
19
+ fan-out so a screen is one cheap query — reads are what you pay for and what users wait on.
21
20
  - **Rules ARE the access control.** Firestore is reachable directly from untrusted clients. There is
22
21
  no app server in the trust path by default — `firestore.rules` (CEL) is the only thing between a
23
22
  browser and your data. App Check attests the request even came from your app before Rules evaluate.
24
- - **Shape data for reads.** Denormalize and fan-out so a screen is one cheap query. Reads are the
25
- thing you pay for and the thing users wait on.
26
-
27
- ## When to use / When NOT to use
28
-
29
- **When to use:**
30
-
31
- - Firestore data modeling: collections vs subcollections, denormalization, fan-out, the 1 MiB
32
- document limit, hotspot avoidance, query constraints.
33
- - Writing or auditing Firestore/Storage Security Rules and testing them with the emulator.
34
- - Firebase Auth: providers, ID-token verification on the server, custom claims, session cookies.
35
- - Cloud Functions (2nd gen): Firestore/HTTPS/callable/Auth-blocking triggers, secrets, idempotency.
36
- - Cloud Storage uploads/downloads gated by Rules + signed URLs.
37
- - Modular SDK imports for tree-shaking, `firebase.json` / `firestore.indexes.json`, Emulator Suite.
38
-
39
- **When NOT to use:**
40
-
41
- - Relational schema, SQL, EXPLAIN, indexing a SQL engine → `../postgresdb/SKILL.md`.
42
- - Managed Postgres BaaS (SQL + Postgres RLS + PostgREST) → `supabase`. This is the most-confused
43
- sibling: same "backend-as-a-service" shape, but a completely different data model and rules language.
44
- - AWS document/key-value store with its own capacity model → `dynamodb`.
45
- - Self-hosted Mongo document modeling → `mongodb`.
46
- - Generic GCP project/IAM/billing not specific to a Firebase product → `gcp-essentials`.
47
- - React/Next.js component or rendering work that merely calls Firebase → `react` / `../nextjs/SKILL.md`.
23
+
24
+ Not this skill:
25
+
26
+ | Instead of Firebase | Go to |
27
+ |---|---|
28
+ | Relational schema, SQL, EXPLAIN, indexing a SQL engine | `../postgresdb/SKILL.md` |
29
+ | Managed Postgres BaaS (SQL + Postgres RLS + PostgREST) — the most-confused sibling: same "backend-as-a-service" shape, completely different data model and rules language | `supabase` |
30
+ | AWS document/key-value store with its own capacity model | `dynamodb` |
31
+ | Self-hosted Mongo document modeling | `mongodb` |
32
+ | Generic GCP project/IAM/billing not specific to a Firebase product | `gcp-essentials` |
33
+ | React/Next.js component or rendering work that merely calls Firebase | `react` / `../nextjs/SKILL.md` |
48
34
 
49
35
  ## Data modeling
50
36
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fly-io
3
- description: "Use when deploying or operating an app on Fly.io — writing fly.toml, running Machines across regions near users, attaching Volumes, managing secrets, or scaling (autostop/autostart, scale count, fly-replay). Triggers: 'fly deploy', 'fly launch', 'desplega a Fly.io a prop dels usuaris', 'users in Sydney see high latency but my app only runs in iad', 'scale my Fly app to zero overnight', 'attach a persistent disk to my Fly machine', 'forward writes to the primary region'. NOT a generic git-push PaaS (that is railway), NOT frontend edge hosting (that is vercel)."
3
+ description: "Use when deploying or operating an app on Fly.io — writing fly.toml, placing Machines in regions near users, attaching Volumes, managing secrets, or picking a scaling lever (autostop/autostart, scale count, fly-replay). NOT choosing which host to deploy on (that is `deployment`), NOT a git-push PaaS with no regions model (that is `railway`)."
4
4
  tags: [fly-io, deployment, machines, regions, scaling]
5
5
  recommends: [docker, scaling, postgresdb, railway, domains-dns]
6
6
  origin: risco
@@ -8,7 +8,7 @@ origin: risco
8
8
 
9
9
  # Deploy on Fly.io
10
10
 
11
- You are deploying an app to Fly.io: a `fly.toml`, Machines (Firecracker microVMs) placed in regions close to users, optional region-pinned Volumes, secrets, and the right scaling lever. Get the mental model right first, then the config follows.
11
+ You are deploying an app to Fly.io: a `fly.toml`, Machines (Firecracker microVMs) placed in regions close to users, optional region-pinned Volumes, secrets, and the right scaling lever. Get the mental model right first, then the config follows. If none of that placement control matters, ../railway/SKILL.md is the git-push PaaS with no Machines/regions model.
12
12
 
13
13
  ## Mental model
14
14
 
@@ -72,7 +72,7 @@ primary_region = "iad" # 3-letter region code: iad, ord, ams, syd, gr
72
72
  initial_size = "1gb"
73
73
  ```
74
74
 
75
- Full field surface (`[[services]]` vs `[http_service]`, health checks, `[[statics]]`, `[[files]]`, all VM sizes, `[restart]`, `[metrics]`) lives in `references/fly-toml.md` — read it when you need a key that is not above.
75
+ Full field surface (`[[services]]` vs `[http_service]`, health checks, `[[statics]]`, `[[files]]`, all VM sizes, `[restart]`, `[metrics]`) lives in `references/fly-toml.md` — read it when you need a key that is not above. Custom domains, certs and registrar-level DNS are ../domains-dns/SKILL.md.
76
76
 
77
77
  ## Regions: place Machines near users
78
78
 
@@ -162,7 +162,7 @@ Treat secret hygiene as non-negotiable — see ../secure-coding/SKILL.md.
162
162
 
163
163
  Key distinction: **autostop ≠ autoscaler.** Autostop only toggles Machines that already exist; it never changes the count. The metrics autoscaler is what actually adds/removes Machines. Set `auto_stop_machines` and `auto_start_machines` **together** — configuring one without the other is undefined behavior.
164
164
 
165
- `fly-replay` is the multi-region write-forwarding pattern: read-replicas serve local reads, a write replies with `fly-replay: region=<primary>` and the Proxy re-runs the request there. Full header forms and the primary/replica split are in `references/multi-region.md`.
165
+ `fly-replay` is the multi-region write-forwarding pattern: read-replicas serve local reads, a write replies with `fly-replay: region=<primary>` and the Proxy re-runs the request there. Full header forms and the primary/replica split are in `references/multi-region.md`. These are the Fly levers only; platform-agnostic scaling theory (queues, sharding, load shedding) is ../scaling/SKILL.md.
166
166
 
167
167
  ## Cost & HA
168
168
 
@@ -195,12 +195,3 @@ It prefers `fly config validate` when flyctl is on PATH, else does structural ch
195
195
  | Treating Fly Postgres as managed | Fly Postgres is unmanaged; you operate it | Route to it here; operate it via ../postgresdb/SKILL.md |
196
196
  | `min_machines_running` in a non-primary region | Ignored outside primary | Keep warm capacity via `scale count` there |
197
197
  | `fly deploy` with no `release_command` for a schema change | New code hits an old schema mid-rollout | `release_command` runs the migration first |
198
-
199
- ## Related skills
200
-
201
- - ../docker/SKILL.md — the Dockerfile/image build Fly consumes.
202
- - ../scaling/SKILL.md — generic horizontal-scaling theory (queues, sharding, load shedding).
203
- - ../postgresdb/SKILL.md — operating the Postgres engine itself; Fly Postgres is unmanaged.
204
- - ../railway/SKILL.md — git-push PaaS with no Machines/regions model.
205
- - ../domains-dns/SKILL.md — custom domains, certs, registrar-level DNS.
206
- - ../secure-coding/SKILL.md — secret handling beyond `fly secrets`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: fundraising
3
- description: "Use when planning or running an equity fundraising round and you need the STRATEGY and PROCESS, not a single document — sizing the raise to a milestone, choosing post-money SAFE vs priced round, building and tiering the investor target list around intro paths, sequencing outreach to manufacture momentum, managing the diligence pipeline, or reading a term sheet to know what to push on before you sign. Triggers: 'plan our seed raise', 'how much should we raise and on what terms', 'SAFE or priced round, what cap', 'build my investor target list', 'how many investors do I actually need to contact', 'we have meetings but no term sheet — the raise stalled', 'got a term sheet, what do I push back on', 'planifica la ronda seed', 'cuántos inversores tengo que contactar', '¿SAFE o ronda con precio?', 'planifiquem la ronda d'inversió'. NOT the slide-deck narrative (that is pitch-deck) and NOT the cap-table/valuation math (that is financial-model)."
3
+ description: "Use when planning or running an equity round as a process: sizing the raise to a milestone, choosing post-money SAFE vs priced round, tiering investors by intro path, sequencing outreach for momentum, or reading a term sheet before signing. NOT the slide narrative (that is `pitch-deck`), NOT the cap-table or valuation math (that is `financial-model`)."
4
4
  tags: [fundraising, seed, safe, term-sheet, investor-pipeline, venture-capital, round-strategy]
5
5
  recommends: [pitch-deck, financial-model, investor-materials, cold-outreach, contracts, grants, unit-economics]
6
6
  origin: risco
@@ -8,7 +8,7 @@ origin: risco
8
8
 
9
9
  # Fundraising — The Operating System for an Equity Round
10
10
 
11
- *Own the round as a PROCESS: size it, pick the instrument, build a tiered list around intro paths, run a concentrated sprint, read the term sheet. You do NOT write the deck, build the model, or package the data room — you decide the strategy and drive the sequence.*
11
+ *Own the round as a PROCESS: size it, pick the instrument, build a tiered list around intro paths, run a concentrated sprint, read the term sheet.*
12
12
 
13
13
  This skill thinks in **funnels** (how many investors at the top to land N term sheets), in **instruments** (post-money SAFE vs priced Series Seed), and in **leverage** (warm intros, parallel meetings, a first term sheet that creates real urgency). It consumes the deck, the model, and the collateral that siblings produce, and orchestrates them into a closed round. Scope: pre-seed through Series A priced rounds and SAFE rounds, founder-side.
14
14
 
@@ -119,9 +119,7 @@ Sprint shape
119
119
  Close first term sheet → use it to compress the rest → sign
120
120
  ```
121
121
 
122
- **The first term sheet changes everything** — it converts soft interest into urgency across the whole pipeline. Use it. But the honesty rule is absolute:
123
-
124
- > **Manufacture FOMO from a visibly busy calendar and a real first term sheet — never from fabricated competing offers or invented deadlines.** Lying about a term sheet you don't have is how a raise dies when one investor calls another; the cost of getting caught is the round.
122
+ **The first term sheet changes everything** — it converts soft interest into urgency across the whole pipeline. Use it. But the honesty rule is absolute, because it is the one mistake with no recovery: **manufacture FOMO from a visibly busy calendar and a real first term sheet — never from fabricated competing offers or invented deadlines.** Lying about a term sheet you don't have is how a raise dies when one investor calls another; the cost of getting caught is the round.
125
123
 
126
124
  Track **count-in-pipeline and stage conversion, not activity**. Benchmarks to instrument the funnel: outreach→meeting ~15%, first→second ~50%. Pipeline stages: `Sourced → Intro requested → First meeting → Partner/2nd → Diligence → Term sheet → Closed`. Week-by-week playbook and the honest-momentum mechanics → `references/process-playbook.md`.
127
125
 
@@ -140,9 +138,9 @@ A founder negotiates the few terms that **compound** — not the headline valuat
140
138
 
141
139
  Median seed lead ownership runs ~12.6%. **Don't sign the first term sheet without a comparison** — a single offer with no comp gives away your only leverage. And the hard handoff: the term sheet is mostly non-binding, but **the binding SAFE / SPA / side letter is a legal document → `../contracts/SKILL.md` and a real lawyer.** You read the term sheet to negotiate; you do not draft the binding instrument here. Full term-by-term cheat sheet with bands and push-on guidance → `references/process-playbook.md`.
142
140
 
143
- ## Anti-patterns / rationalizations → STOP
141
+ ## Anti-patterns
144
142
 
145
- | Rationalization | Reality / Fix |
143
+ | Anti-pattern | Do instead |
146
144
  | --- | --- |
147
145
  | "Raise the max — more runway is always better." | More dilution for proof you don't have. Size to the next milestone (Step 1). |
148
146
  | "I'll send a few emails and see who bites." | A serial trickle kills momentum. Concentrate 30–50 meetings in 2 weeks, parallel. |
@@ -153,10 +151,3 @@ Median seed lead ownership runs ~12.6%. **Don't sign the first term sheet withou
153
151
  | "Cold outreach is the main channel." | Cold replies ~1–3%; warm converts ~30–50%. Build around intro paths, cold last. |
154
152
  | "Tell investors we have a competing term sheet." | If untrue, the raise dies when they call each other. FOMO from real signals only. |
155
153
  | "Push the valuation up, that's the win." | The terms that compound are pref, pool, board, dilution — not headline price alone. |
156
-
157
- ## Handoffs + references
158
-
159
- - Story / slides → `../pitch-deck/SKILL.md` · numbers, cap-table, valuation → `../financial-model/SKILL.md` · one-pager, data room, updates → `../investor-materials/SKILL.md`.
160
- - Cold message copy → `../cold-outreach/SKILL.md` · binding legal doc → `../contracts/SKILL.md` · non-dilutive → `../grants/SKILL.md` · LTV/CAC probe → `../unit-economics/SKILL.md`.
161
- - `references/funnel-math.md` — work-backward funnel arithmetic, warm-intro priority ladder with per-path conversion bands, A/B/C tiering rubric, pipeline stage schema, worked $3M-seed top-of-funnel.
162
- - `references/process-playbook.md` — 6–8 week sprint week-by-week, honest momentum/FOMO mechanics, SAFE-vs-priced decision table (cost/speed/dilution), post-money SAFE pile-up worked example, term-sheet-basics cheat sheet with 2025 bands.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: game-design
3
- description: "Use when designing or repairing the design of a game — inventing mechanics and systems, shaping the core loop, layering moment-to-moment / session / meta loops, planning progression, economy, currencies and sinks/faucets, tuning difficulty curves and balance, killing dominant strategies, adding 'juice'/game feel as design intent, prototyping and playtesting, or controlling scope, and especially when the ask is 'why isn't my game fun'. Triggers: 'design the core loop', 'my game isn't fun / doesn't hook', 'balance the economy', 'the difficulty curve feels off', 'players found a dominant strategy', 'how do I scope this', 'reward / progression loop', 'diseñar la mecánica', 'el juego no engancha', 'com equilibro l'economia'. NOT writing engine code, scripts or shaders (route to godot/unity/unreal), NOT narrative, dialogue or story beats (route to game-storytelling), NOT level layout or encounter placement (route to level-design)."
3
+ description: "Use when designing or repairing what makes a game fun — verbs and mechanics, moment-to-moment/session/meta loops, progression, economy faucets and sinks, difficulty curves, dominant strategies, juice, prototyping and scope. NOT engine code (that is `godot`), NOT story (that is `game-storytelling`), NOT level layout (that is `level-design`)."
4
4
  tags: [game-design, mechanics, core-loop, balancing, progression, playtesting, scope, fun]
5
5
  recommends: [level-design, game-storytelling, godot, unity, unreal]
6
6
  profiles: [full]
@@ -9,36 +9,19 @@ origin: risco
9
9
 
10
10
  # Design games that are fun on purpose
11
11
 
12
- Engine-agnostic game design: mechanics, loops, progression, economy, balance, feel, and the discipline of prototyping and scope. No engine APIs live here — when the design is settled, the implementation belongs to `godot`, `unity`, or `unreal`.
12
+ Engine-agnostic game design: mechanics, loops, progression, economy, balance, feel, and the discipline of prototyping and scope. No engine APIs live here — when the design is settled, the implementation belongs to [`godot`](../godot/SKILL.md), [`unity`](../unity/SKILL.md), or [`unreal`](../unreal/SKILL.md).
13
13
 
14
- ## The one rule
14
+ Two premises govern everything below. **Fun is discovered, not designed** — you cannot reason your way to a fun game on paper, you find it by building the smallest playable version and playing it, so every hour spent planning a mechanic you have not prototyped is an hour spent guessing. And **a game is the set of verbs it gives the player plus the loops those verbs live in** — art, story, and levels dress that skeleton; if the skeleton is not fun in greybox, nothing dresses it into fun.
15
15
 
16
- > Fun is discovered, not designed. You cannot reason your way to a fun game on paper; you find it by building the smallest playable version and playing it. Every hour spent planning a mechanic you have not prototyped is an hour spent guessing. Prototype the riskiest assumption first, play it, then decide.
17
-
18
- > The design of a game is the set of **verbs** it gives the player plus the **loops** those verbs live in. Everything else — art, story, levels — dresses that skeleton. If the skeleton is not fun in greybox, nothing dresses it into fun.
19
-
20
- ## When to use / When NOT
21
-
22
- **Use when:**
23
- - Inventing or reworking mechanics and systems, or defining the player's verb set.
24
- - Shaping the core loop, or layering moment-to-moment → session → meta.
25
- - Planning progression, unlocks, pacing, or an in-game economy.
26
- - Tuning a difficulty curve, hunting a dominant strategy, or setting up data-driven balance.
27
- - Adding "juice" / game feel **as a design concept** (what feedback, why).
28
- - Prototyping, planning a playtest, deciding what to measure, or cutting scope.
29
- - The vague-but-critical ask: "why isn't my game fun / why doesn't it hook?"
30
-
31
- **Do NOT use — route instead:**
16
+ Route elsewhere when the ask is not design:
32
17
 
33
18
  | The ask | Route to | Why not here |
34
19
  | --- | --- | --- |
35
- | Write the movement/AI/shader/save code | `godot` / `unity` / `unreal` | This skill decides *what* to build; the engine skill builds it. |
36
- | Author the story, dialogue, characters, lore | `game-storytelling` | Narrative design is its own craft; this skill owns systems and verbs. |
37
- | Lay out a level, encounter, or world map | `level-design` | Spatial/encounter design applies the mechanics this skill defines. |
38
- | Netcode, prediction, lag compensation | `gamedev-multiplayer` | A technical domain, not core design intent. |
39
- | Ship / store page / build pipeline | `gamedev-shipping` | Release logistics, not design. |
40
-
41
- (`godot`, `unity`, `unreal`, `game-storytelling`, `level-design` are linkable siblings; the rest are known ids you name but cannot link yet.)
20
+ | Write the movement/AI/shader/save code | [`godot`](../godot/SKILL.md) / [`unity`](../unity/SKILL.md) / [`unreal`](../unreal/SKILL.md) | This skill decides *what* to build; the engine skill builds it. |
21
+ | Author the story, dialogue, characters, lore | [`game-storytelling`](../game-storytelling/SKILL.md) | Narrative design is its own craft; this skill owns systems and verbs. |
22
+ | Lay out a level, encounter, or world map | [`level-design`](../level-design/SKILL.md) | Spatial/encounter design applies the mechanics this skill defines. |
23
+ | Netcode, prediction, lag compensation | [`gamedev-multiplayer`](../gamedev-multiplayer/SKILL.md) | A technical domain, not core design intent. |
24
+ | Ship / store page / build pipeline | [`gamedev-shipping`](../gamedev-shipping/SKILL.md) | Release logistics, not design. |
42
25
 
43
26
  ## Loops: moment-to-moment → session → meta
44
27
 
@@ -149,13 +132,6 @@ Playtest protocols, metrics/retention definitions, the prototyping ladder, and c
149
132
 
150
133
  If the workspace has a `02-DOCS/` harness, record the design in `02-DOCS/wiki/design/` — a `game-design.md` one-pager (hook, core loop, verbs, pillars, MVP scope, what's out) plus an `economy.md` if there is a currency system. Write each as an OKF v0.1 wiki article per the harness [`wiki-article-template.md`](../harness/references/wiki-article-template.md): YAML frontmatter with a non-empty `type:` (use `type: design`), a `timestamp` in ISO 8601, and standard markdown links — never wikilinks. Index it in `02-DOCS/wiki/index.md`. This is **recorded, not gated** — skip silently if there is no harness.
151
134
 
152
- ## Related skills
153
-
154
- - `../level-design/SKILL.md` — applies these mechanics in space: layout, pacing beats, encounter design.
155
- - `../game-storytelling/SKILL.md` — narrative, dialogue, and how story wraps the systems you define here.
156
- - `../godot/SKILL.md`, `../unity/SKILL.md`, `../unreal/SKILL.md` — implement the settled design; all engine APIs, feel/juice code, and data-driven tuning loaders live there.
157
- - Known siblings to name but not yet link: `gamedev-multiplayer`, `gamedev-physics`, `gamedev-pathing`, `gamedev-shaders`, `gamedev-shipping`.
158
-
159
135
  ## Checklist
160
136
 
161
137
  - [ ] The **core verb** is named and is fun in greybox with no goal attached.