@ericrisco/rsc 0.1.44 → 0.1.46
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/README.md +1 -1
- package/manifest.json +110 -86
- package/package.json +1 -1
- package/scripts/lib/domains.js +1 -1
- package/scripts/skill-migration-brief.md +192 -0
- package/skills/ab-testing/SKILL.md +9 -41
- package/skills/accessibility/SKILL.md +5 -7
- package/skills/ads/SKILL.md +9 -24
- package/skills/agent-eval/SKILL.md +7 -33
- package/skills/agent-safety/SKILL.md +7 -14
- package/skills/ai-media/SKILL.md +4 -20
- package/skills/analytics/SKILL.md +8 -30
- package/skills/analyze/SKILL.md +24 -59
- package/skills/angular/SKILL.md +12 -25
- package/skills/api-connector-builder/SKILL.md +10 -27
- package/skills/api-design/SKILL.md +7 -14
- package/skills/article-writing/SKILL.md +1 -18
- package/skills/astro/SKILL.md +36 -54
- package/skills/author-skill/SKILL.md +41 -74
- package/skills/author-skill/evals/README.md +5 -5
- package/skills/author-skill/evals/cases.yaml +8 -8
- package/skills/author-skill/references/description-recipe.md +25 -26
- package/skills/author-skill/references/eval-authoring.md +1 -1
- package/skills/author-skill/references/rsc-conventions.md +1 -1
- package/skills/automation-flows/SKILL.md +6 -16
- package/skills/automation-strategy/SKILL.md +1 -9
- package/skills/aws-essentials/SKILL.md +6 -23
- package/skills/backups/SKILL.md +1 -7
- package/skills/bash-scripting/SKILL.md +5 -9
- package/skills/bookkeeping/SKILL.md +2 -10
- package/skills/brand-identity/SKILL.md +18 -44
- package/skills/brand-voice/SKILL.md +4 -31
- package/skills/building-agents/SKILL.md +20 -103
- package/skills/business-intelligence/SKILL.md +9 -23
- package/skills/calendar-scheduling/SKILL.md +11 -27
- package/skills/case-studies/SKILL.md +3 -8
- package/skills/chatbot/SKILL.md +6 -23
- package/skills/chrome-extension/SKILL.md +2 -2
- package/skills/clarify/SKILL.md +31 -72
- package/skills/clickhouse-analytics/SKILL.md +2 -8
- package/skills/client-onboarding/SKILL.md +17 -19
- package/skills/cloudflare/SKILL.md +3 -8
- package/skills/code-review/SKILL.md +10 -23
- package/skills/codebase-onboarding/SKILL.md +2 -7
- package/skills/cold-outreach/SKILL.md +9 -30
- package/skills/community/SKILL.md +4 -31
- package/skills/competitor-watch/SKILL.md +20 -35
- package/skills/compliance/SKILL.md +10 -37
- package/skills/compose-multiplatform/SKILL.md +1 -1
- package/skills/constitution/SKILL.md +8 -35
- package/skills/content-engine/SKILL.md +4 -16
- package/skills/context-budget/SKILL.md +3 -21
- package/skills/continuous-learning/SKILL.md +10 -40
- package/skills/contracts/SKILL.md +6 -17
- package/skills/coolify/SKILL.md +8 -14
- package/skills/cost-tracking/SKILL.md +3 -11
- package/skills/course-builder/SKILL.md +17 -45
- package/skills/course-storytelling/SKILL.md +26 -94
- package/skills/cpp/SKILL.md +26 -71
- package/skills/csharp-dotnet/SKILL.md +19 -38
- package/skills/customer-support/SKILL.md +14 -37
- package/skills/dashboard/SKILL.md +6 -26
- package/skills/data-cleaning/SKILL.md +37 -63
- package/skills/data-policy/SKILL.md +8 -21
- package/skills/data-scraper/SKILL.md +1 -7
- package/skills/debug/SKILL.md +10 -49
- package/skills/deployment/SKILL.md +38 -101
- package/skills/design/SKILL.md +34 -116
- package/skills/fable-operator/SKILL.md +1 -4
- package/skills/fastapi/SKILL.md +50 -82
- package/skills/flutter/SKILL.md +41 -89
- package/skills/go/SKILL.md +57 -105
- package/skills/harness/SKILL.md +52 -68
- package/skills/implement/SKILL.md +1 -1
- package/skills/init/SKILL.md +152 -168
- package/skills/marketing/SKILL.md +30 -80
- package/skills/nextjs/SKILL.md +42 -116
- package/skills/orient/SKILL.md +25 -20
- package/skills/parallel/SKILL.md +9 -75
- package/skills/plan/SKILL.md +92 -165
- package/skills/postgresdb/SKILL.md +52 -72
- package/skills/presentations/SKILL.md +49 -87
- package/skills/python/SKILL.md +23 -72
- package/skills/react/SKILL.md +19 -67
- package/skills/review/SKILL.md +22 -52
- package/skills/rust/SKILL.md +40 -115
- package/skills/sdd-init/SKILL.md +9 -14
- package/skills/secure-coding/SKILL.md +80 -109
- package/skills/ship/SKILL.md +25 -55
- package/skills/tasks/SKILL.md +37 -61
- package/skills/typescript/SKILL.md +22 -55
- package/skills/verify/SKILL.md +8 -32
- package/skills/viral-score/SKILL.md +122 -0
- package/skills/viral-score/evals/README.md +16 -0
- package/skills/viral-score/evals/cases.yaml +50 -0
- package/skills/vue-nuxt/SKILL.md +45 -106
- package/skills/worktrees/SKILL.md +24 -69
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: automation-flows
|
|
3
|
-
description: "Use when building or fixing a no-code automation on n8n, Make, or Zapier —
|
|
3
|
+
description: "Use when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the platform by billing unit (task vs credit vs execution). NOT a typed API client in code (that is api-connector-builder), NOT a webhook receiver in your own app (that is webhooks)."
|
|
4
4
|
tags: [automation, n8n, make, zapier, no-code, workflows, error-handling, integrations]
|
|
5
5
|
recommends: [automation-strategy, n8n, make, zapier, power-automate, webhooks, api-connector-builder, error-handling, stripe, notion-connector, google-workspace, whatsapp-telegram]
|
|
6
6
|
profiles: []
|
|
@@ -9,16 +9,12 @@ origin: risco
|
|
|
9
9
|
|
|
10
10
|
# Automation flows — glue many SaaS apps on a visual platform, with an error path that actually fires
|
|
11
11
|
|
|
12
|
-
You are building a working automation on a hosted visual platform: a trigger, a chain of app actions with branching and explicit data mapping, and
|
|
12
|
+
You are building a working automation on a hosted visual platform: a trigger, a chain of app actions with branching and explicit data mapping, and an error-handling and retry strategy without which the flow is not done.
|
|
13
13
|
|
|
14
14
|
Your job is two things at once: **platform judgement** (pick n8n vs Make vs Zapier by the constraints) and a **buildable artifact** (an importable n8n workflow JSON, or a precise numbered build sheet for Make/Zapier, which have no portable export).
|
|
15
15
|
|
|
16
16
|
This skill stops the moment the right answer is real code. Writing a typed API client → `../api-connector-builder/SKILL.md`. Building the endpoint that *receives* a webhook in your own app → `../webhooks/SKILL.md`. Scripting one vendor directly → `../stripe/SKILL.md`, `../notion-connector/SKILL.md`, `../google-workspace/SKILL.md`, `../whatsapp-telegram/SKILL.md`.
|
|
17
17
|
|
|
18
|
-
## The iron rule
|
|
19
|
-
|
|
20
|
-
Every flow ships with an error path. Before you call a flow done, you must be able to point at: where a failed run goes, how many times it retries, and who gets told. No exceptions.
|
|
21
|
-
|
|
22
18
|
## 1. Pick the platform
|
|
23
19
|
|
|
24
20
|
The single most expensive mistake is choosing on familiarity instead of cost model. The three platforms bill on fundamentally different units, and at volume that gap is 10×.
|
|
@@ -60,7 +56,7 @@ Good: Trigger = Airtable "new record" webhook → fires the instant
|
|
|
60
56
|
|
|
61
57
|
## 3. Error handling — the spine
|
|
62
58
|
|
|
63
|
-
|
|
59
|
+
Every flow ships with an error path, because a flow without one is a silent failure waiting for the day the API hiccups and nobody notices the orders stopped syncing. Before you call a flow done you must be able to point at three things: where a failed run goes, how many times it retries, and who gets told. Full per-platform recipes (including the manual exponential-backoff loop) live in `references/error-handling.md`, and the retry/backoff theory under them in `../error-handling/SKILL.md`; here is the working core.
|
|
64
60
|
|
|
65
61
|
**n8n.** Build a dedicated **Error Workflow** that begins with the **Error Trigger** node — it runs only when a monitored workflow fails. Wire it to Slack/email/a log row, then set it as the main flow's `settings.errorWorkflow`. On risky nodes (anything hitting an external API) toggle **Retry On Fail** (Max Tries 3–5, set a Wait between tries) and, where a single failed item shouldn't kill the run, **Continue On Fail** (the node emits an error object instead of halting). n8n's built-in retry is **linear** — for true exponential backoff you build a wait/loop yourself (recipe in references).
|
|
66
62
|
|
|
@@ -108,7 +104,9 @@ Good: webhook → lookup event_id in store →
|
|
|
108
104
|
|
|
109
105
|
**If n8n is chosen, produce an importable workflow JSON** the user can paste into *Import from File/Clipboard*. It must have a non-empty `nodes` array (including a trigger node), a `connections` object, and `settings.errorWorkflow` pointing at the Error Workflow. Reference credentials by the n8n **credential store**, never paste secrets inline. Full schema and a minimal trigger→action→error example: `references/n8n-workflow-json.md`.
|
|
110
106
|
|
|
111
|
-
**If Make or Zapier is chosen, produce a numbered build sheet** — neither has a portable export you can hand over. One row per step: `# | app | action | field mapping (source → target) | error directive`. End with the trigger type and the dedup key.
|
|
107
|
+
**If Make or Zapier is chosen, produce a numbered build sheet** — neither has a portable export you can hand over. One row per step: `# | app | action | field mapping (source → target) | error directive`. End with the trigger type and the dedup key.
|
|
108
|
+
|
|
109
|
+
Run `scripts/verify.sh` on any JSON you emit: read-only, no network, no credentials — it parses the file and checks a non-empty `nodes` array, a `connections` object, and ≥1 trigger node (exits 0 on an empty target).
|
|
112
110
|
|
|
113
111
|
## Anti-patterns
|
|
114
112
|
|
|
@@ -122,11 +120,3 @@ Good: webhook → lookup event_id in store →
|
|
|
122
120
|
| Secrets pasted inline in a node | Leaked in exports, unrotatable, shared everywhere | Use the platform credential store, reference by name |
|
|
123
121
|
| One mega-flow doing everything | Unreadable, untestable, one failure nukes all | Split: trigger → sub-flow per concern |
|
|
124
122
|
| Choosing platform by familiarity | Bill 10× higher than the right unit; "my automation bill exploded" | Pick by billing unit (task vs op vs execution) up front |
|
|
125
|
-
|
|
126
|
-
## References & verification
|
|
127
|
-
|
|
128
|
-
- `references/error-handling.md` — per-platform error deep dive, the manual exponential-backoff loop for n8n, and the three dedup patterns.
|
|
129
|
-
- `references/n8n-workflow-json.md` — importable n8n JSON schema, minimal example, import steps, what `verify.sh` checks.
|
|
130
|
-
- `scripts/verify.sh` — read-only; validates any `*.json` workflow you emit (parses, non-empty `nodes`, `connections` object, ≥1 trigger node). No network, no credentials. Exits 0 on an empty target.
|
|
131
|
-
|
|
132
|
-
Cross-skills: webhook receiver → `../webhooks/SKILL.md`; typed API client in code → `../api-connector-builder/SKILL.md`; deeper retry/backoff theory → `../error-handling/SKILL.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: automation-strategy
|
|
3
|
-
description: "Use when deciding whether a process is worth automating,
|
|
3
|
+
description: "Use when deciding whether a process is worth automating, sizing ROI and build-vs-buy, choosing an automation platform, or diagnosing why a fleet of automations keeps breaking — the decision layer before anyone builds. NOT building the flow (that is `automation-flows`, or `n8n` / `make` / `zapier` / `power-automate` to drive a live platform)."
|
|
4
4
|
tags: [automation, strategy, roi, build-vs-buy, platform-selection, orchestration, idempotency, n8n, make, zapier, power-automate]
|
|
5
5
|
recommends: [automation-flows, n8n, make, zapier, power-automate]
|
|
6
6
|
profiles: [core, full]
|
|
@@ -111,14 +111,6 @@ These are the guarantees every automation must meet regardless of platform. This
|
|
|
111
111
|
| **No owner** | Orphaned automations rot; nobody notices the break or knows how it works | Name an owner + a one-page runbook per automation |
|
|
112
112
|
| **Choosing platform by familiarity** | Bill 10× higher than the right billing unit; "our automation bill exploded" | Pick by billing unit for your run shape (§3) |
|
|
113
113
|
|
|
114
|
-
## Related skills
|
|
115
|
-
|
|
116
|
-
- `../automation-flows/SKILL.md` — **build layer**: designs the flow and emits the importable artifact once this skill has decided *whether* and *where*. Strategy decides; automation-flows designs.
|
|
117
|
-
- `../n8n/SKILL.md`, `../make/SKILL.md`, `../zapier/SKILL.md`, `../power-automate/SKILL.md` — **operate layer**: drive that platform's live API/MCP to CRUD, activate, and run. Route here after §3.
|
|
118
|
-
- `../api-connector-builder/SKILL.md` — when the answer is custom code, not a platform: typed client with auth/pagination/backoff.
|
|
119
|
-
- `../webhooks/SKILL.md` — when you need to *receive* events in your own app (this skill treats webhooks as triggers, it doesn't build the receiver).
|
|
120
|
-
- `../secure-coding/SKILL.md` — secrets/rotation engineering behind the orchestration policy in §4.
|
|
121
|
-
|
|
122
114
|
## Checklist
|
|
123
115
|
|
|
124
116
|
- [ ] Ran the §1 gate: frequency × time-saved × error-rate × **stability** — and confirmed the process is standardized, not chaos being paved.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: aws-essentials
|
|
3
|
-
description: "Use when standing up the core AWS surface a small product needs
|
|
3
|
+
description: "Use when standing up the core AWS surface a small product needs: hardening a fresh account, a private S3 bucket, encrypted RDS Postgres, ECS Fargate vs EC2, CloudFront + OAC, or scoping an IAM policy to least privilege. NOT the CI pipeline that ships the container (that is `deployment`), NOT app-code access-control review (that is `secure-coding`)."
|
|
4
4
|
tags: [aws, cloud, iam, s3, infrastructure]
|
|
5
5
|
recommends: [deployment, secure-coding, dynamodb, postgresdb]
|
|
6
6
|
origin: risco
|
|
@@ -17,19 +17,6 @@ god-mode app roles, long-lived keys, unencrypted databases). Pick the right tier
|
|
|
17
17
|
account hardening → IAM (roles + scoped policies) → S3 (private) / RDS (encrypted) / ECS Fargate → CloudFront (OAC) → infra exists, wired, least-privilege
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
## Operating posture — three rules
|
|
21
|
-
|
|
22
|
-
- **Secure by default: keep the defaults AWS already hardened.** New S3 buckets are private
|
|
23
|
-
since April 2023 (Block Public Access on, ACLs disabled, SSE-S3 encryption). Do not undo them.
|
|
24
|
-
- **Least privilege: scope every policy, never `"*"` on `"*"`.** A role that can do everything
|
|
25
|
-
is a breach waiting for one leaked credential. Start from a managed policy, then tighten.
|
|
26
|
-
- **Roles, not keys.** Temporary credentials from a role beat a long-lived `AKIA…` access key
|
|
27
|
-
that lives forever in a `.env` and ends up on GitHub. Apps get task roles; CI gets OIDC.
|
|
28
|
-
|
|
29
|
-
Boundary in one sentence: **this skill provisions and secures the AWS account and its core
|
|
30
|
-
services; `../deployment/SKILL.md` puts your container on it; `../secure-coding/SKILL.md` audits
|
|
31
|
-
the code inside it.**
|
|
32
|
-
|
|
33
20
|
## Service decision table
|
|
34
21
|
|
|
35
22
|
| Need | Use | Use instead if |
|
|
@@ -61,7 +48,9 @@ Do this once, before anything else. Each line has a reason; skip none.
|
|
|
61
48
|
|
|
62
49
|
Two principal types. **IAM users** = long-lived humans/keys; avoid them for workloads. **Roles**
|
|
63
50
|
= an identity something *assumes* to get temporary credentials — this is what ECS tasks, Lambda,
|
|
64
|
-
CI, and federated humans use. Default to roles
|
|
51
|
+
CI, and federated humans use. Default to roles: a temporary credential beats a long-lived `AKIA…`
|
|
52
|
+
key that lives forever in a `.env`. (IAM governs who may call AWS APIs; access control *inside*
|
|
53
|
+
your app code is `../secure-coding/SKILL.md`.)
|
|
65
54
|
|
|
66
55
|
A policy is a JSON document. The four parts that matter:
|
|
67
56
|
|
|
@@ -181,7 +170,8 @@ Two more non-negotiables: the DB security group **references the app's security
|
|
|
181
170
|
`0.0.0.0/0` (a DB open to the internet is a breach, not a convenience); credentials live in
|
|
182
171
|
**Secrets Manager** with managed rotation (`--manage-master-user-password` above), never in task
|
|
183
172
|
env vars. Use `--multi-az` for production HA. Full recipe (SG wiring, Secrets Manager rotation,
|
|
184
|
-
connecting from ECS) → `references/rds-cloudfront-recipes.md`.
|
|
173
|
+
connecting from ECS) → `references/rds-cloudfront-recipes.md`. Schema, indexes and query tuning
|
|
174
|
+
once the instance exists → `../postgresdb/SKILL.md`.
|
|
185
175
|
|
|
186
176
|
## CloudFront + OAC — public web content, private bucket
|
|
187
177
|
|
|
@@ -214,10 +204,3 @@ Full CLI: create OAC → distribution → S3 bucket policy JSON → invalidation
|
|
|
214
204
|
| Root user for daily ops | Highest blast radius, no per-action attribution | Root only for root-only tasks; admin via Identity Center |
|
|
215
205
|
| No MFA on root | One phished password = total account loss | Passkey/security-key MFA on root and every human |
|
|
216
206
|
| Confusing task role and execution role | App gets 403 at runtime, or ECS can't pull the image | Execution = pull image/logs; task = app's runtime perms |
|
|
217
|
-
|
|
218
|
-
## Cross-links
|
|
219
|
-
|
|
220
|
-
- `../deployment/SKILL.md` — Dockerfile, CI/CD, OIDC to ECR, the actual ship-the-container step.
|
|
221
|
-
- `../secure-coding/SKILL.md` — app-code access control / OWASP (vs cloud IAM here).
|
|
222
|
-
- `../postgresdb/SKILL.md` — schema, indexes, query tuning once the RDS instance exists.
|
|
223
|
-
- For key-value / single-table serverless data instead of RDS, reach for the `dynamodb` skill.
|
package/skills/backups/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: backups
|
|
3
|
-
description: "Use when designing or auditing a backup-and-restore program that must survive a real disaster
|
|
3
|
+
description: "Use when designing or auditing a backup-and-restore program that must survive a real disaster: setting defensible RPO/RTO targets, laying out 3-2-1-1-0 copies that are offsite and immutable, wiring point-in-time recovery, and proving restores work on a schedule. NOT tuning Postgres internals or writing the archive_command (that is `postgresdb`)."
|
|
4
4
|
tags: [backups, disaster-recovery, pitr, rpo-rto, restore]
|
|
5
5
|
recommends: [postgresdb, secure-coding, monitoring]
|
|
6
6
|
origin: risco
|
|
@@ -128,10 +128,4 @@ The fill-in-the-blank restore runbook, the scheduled-test checklist, and the act
|
|
|
128
128
|
| Trusting managed snapshots without knowing the ceiling | RDS caps at 35 days; longer needs an exported copy | Know the retention ceiling, export beyond it (§3) |
|
|
129
129
|
| Counting "job succeeded" as success | The job wrote a corrupt/empty archive | `check`/`verify` + a real test restore (§6–7) |
|
|
130
130
|
|
|
131
|
-
## References
|
|
132
|
-
|
|
133
|
-
- `references/engine-recipes.md` — copy-paste config and commands per engine: pgBackRest stanza + full/diff + PITR `--type=time`, WAL-G, RDS `restore-db-instance-to-point-in-time`, XtraBackup + binlog, Redis RDB/AOF, restic/Borg against an Object-Lock bucket.
|
|
134
|
-
- `references/restore-runbook.md` — fill-in restore runbook template, the scheduled-restore-test checklist, and the actual-RTO log table.
|
|
135
|
-
- Engine internals (archive_command, VACUUM, migrations): `../postgresdb/SKILL.md`. Encryption-key management as a security control: `../secure-coding/SKILL.md`.
|
|
136
|
-
|
|
137
131
|
`scripts/verify.sh <path-to-policy-or-runbook>` lints a produced backup-policy/runbook artifact for the five pillars (RPO, RTO, offsite, immutability, scheduled-restore + verification). It is a completeness lint, not a backup executor.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bash-scripting
|
|
3
|
-
description: "Use when writing or hardening a shell script that
|
|
3
|
+
description: "Use when writing or hardening a shell script that must survive another machine — a CI step, install script, cron job, git hook, devcontainer entrypoint: strict-mode leaks, quoting/word-splitting, arrays, trap cleanup, bash-vs-POSIX portability, ShellCheck findings. NOT CI workflow structure, runners, caching or matrix (that is `github-actions`)."
|
|
4
4
|
tags: [bash, shell, shellcheck, posix, scripting]
|
|
5
5
|
recommends: [github-actions, error-handling, docker, secure-coding]
|
|
6
6
|
origin: risco
|
|
@@ -47,7 +47,10 @@ is `#!/bin/sh` you may not get bash — on Debian/Alpine `sh` is `dash`/busybox.
|
|
|
47
47
|
Two traps to internalize: macOS `/bin/bash` is **3.2** (no `declare -A`,
|
|
48
48
|
no `${var,,}`, no `mapfile`); and bash **5.3** added `${ cmd; }` /
|
|
49
49
|
`GLOBSORT` / `read -E` that will not run on either of the above. Pick a floor
|
|
50
|
-
and stay above it
|
|
50
|
+
and stay above it — the full bash-vs-POSIX feature matrix, `bash 3.2`
|
|
51
|
+
workarounds, dash/busybox gotchas, the 5.3 features to guard, and how to test
|
|
52
|
+
one script under several shells are in
|
|
53
|
+
[`references/portability.md`](references/portability.md).
|
|
51
54
|
|
|
52
55
|
## Strict mode, honestly
|
|
53
56
|
|
|
@@ -222,10 +225,3 @@ belongs to `../github-actions/SKILL.md`, the shell inside the step belongs here.
|
|
|
222
225
|
| `[ a == b ]` under `#!/bin/sh` | `==` is a bashism; dash errors | POSIX uses `[ a = b ]` |
|
|
223
226
|
| Fixed temp path `/tmp/build` | race + collision + no cleanup | `tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT` |
|
|
224
227
|
| `pipefail` in a `#!/bin/sh` script | not POSIX; dash ignores or errors | use bash, or check pipeline status another way |
|
|
225
|
-
|
|
226
|
-
## References
|
|
227
|
-
|
|
228
|
-
- `references/portability.md` — the full bash-vs-POSIX feature matrix, macOS
|
|
229
|
-
`bash 3.2` workarounds (no `declare -A` / `${var,,}` / `mapfile` — portable
|
|
230
|
-
equivalents), dash/busybox gotchas, the bash 5.3 feature list to guard or
|
|
231
|
-
avoid, and how to test the same script under multiple shells.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bookkeeping
|
|
3
|
-
description: "Use when a small business needs
|
|
3
|
+
description: "Use when a small business needs audit-ready books — a chart of accounts, posting a transaction to the right account and side, clearing an uncategorized bank feed, cash vs accrual, or a ledger that won't tie to the bank. NOT interpreting the numbers — runway, burn, P&L cadence (that is `finance-ops`), NOT issuing invoices (that is `invoicing`)."
|
|
4
4
|
tags: [bookkeeping, double-entry, chart-of-accounts, reconciliation, ledger, accounting, categorization]
|
|
5
5
|
recommends: [finance-ops, invoicing, pricing, financial-model, cost-tracking, stripe, spreadsheet-ops]
|
|
6
6
|
origin: risco
|
|
@@ -14,7 +14,7 @@ The whole job is one loop: **Record → Classify → Reconcile.** Record the raw
|
|
|
14
14
|
|
|
15
15
|
## Route out before you start
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
"Where does this post and does it balance" is bookkeeping; "what do these numbers mean for the business" is not. Route out when the ask is:
|
|
18
18
|
|
|
19
19
|
- Interpreting the numbers — runway, burn, P&L review, monthly finance cadence → `../finance-ops/SKILL.md`.
|
|
20
20
|
- Creating or sending a customer invoice, chasing payment (AR) → `../invoicing/SKILL.md`.
|
|
@@ -24,8 +24,6 @@ This skill answers "where does this transaction go and does the ledger balance."
|
|
|
24
24
|
- Reading/writing the Stripe API, syncing payouts programmatically → `../stripe/SKILL.md`.
|
|
25
25
|
- Building the spreadsheet mechanics — formulas, pivots — themselves → `../spreadsheet-ops/SKILL.md`.
|
|
26
26
|
|
|
27
|
-
Rule of thumb: "where does this post and does it balance" is bookkeeping; "what do these numbers mean for the business" is finance-ops.
|
|
28
|
-
|
|
29
27
|
## Rule 1 — every entry balances: debits = credits
|
|
30
28
|
|
|
31
29
|
Double-entry means each transaction touches at least two accounts, and **total debits equal total credits** — always. The check behind it is the accounting equation, which must hold after every posting:
|
|
@@ -176,9 +174,3 @@ Spain (autónomo, estimación directa simplificada): the obligation is **libros
|
|
|
176
174
|
| Mixing personal and business in one account | Untraceable books, tax and liability exposure | Separate business account; owner draws/capital for transfers |
|
|
177
175
|
| Trusting bank-feed auto-match blindly | Miscategorizes transfers, refunds, draws | Review every match against type/date/amount |
|
|
178
176
|
| Over-splitting the COA into 200 accounts | Every classification becomes a coin flip | Start at ~20–30; merge when you hesitate |
|
|
179
|
-
|
|
180
|
-
## References
|
|
181
|
-
|
|
182
|
-
- `references/chart-of-accounts.md` — full numbered example COA across the five categories, contra accounts (accumulated depreciation, allowance for doubtful accounts), add-vs-merge rules, the over-splitting failure mode.
|
|
183
|
-
- `references/reconciliation-playbook.md` — step-by-step month-end reconciliation, the full won't-tie-out diagnostic ladder, and the jurisdiction detail (IRS retention table + Spain libros registro de IVA fields).
|
|
184
|
-
- `references/tricky-transactions.md` — the classification cases that bare judgment gets wrong: transfers, refunds, partial/overpayments, loan & finance splits, payroll decomposition, prepaids & deferrals, accruals, sales tax/VAT collected, merchant-fee netting (Stripe/PayPal gross-vs-net), bad debt, foreign currency, personal/mixed-use — each with the right journal entry and the wrong one it replaces.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brand-identity
|
|
3
|
-
description: "Use when
|
|
3
|
+
description: "Use when a project needs its visual foundation built or consolidated into one system: logo brief, color system in HEX/RGB/CMYK/OKLCH with proven AA contrast, type system, usage rules, and an exported W3C design-tokens.json that later skills consume. NOT the applied UI pixels (that is design), NOT the words or tone (that is brand-voice)."
|
|
4
4
|
tags: [brand, identity, logo, color, typography]
|
|
5
5
|
recommends: [design, brand-voice, press-kit, presentations]
|
|
6
6
|
origin: risco
|
|
@@ -10,46 +10,19 @@ origin: risco
|
|
|
10
10
|
|
|
11
11
|
*This skill emits the brand book — logo brief, color system, type system, usage rules — and a machine-readable `design-tokens.json` that `design` consumes. You write the rules every later pixel must obey; you do not paint the live UI.*
|
|
12
12
|
|
|
13
|
-
A brand identity with nothing checkable behind it is a mood board. The bar here is a **brand book that compiles**: roles named, every color carrying four channels, contrast pairs proven against WCAG, and a tokens file that `scripts/verify.sh` can validate.
|
|
13
|
+
A brand identity with nothing checkable behind it is a mood board. The bar here is a **brand book that compiles**: roles named, every color carrying four channels, contrast pairs proven against WCAG, and a tokens file that `scripts/verify.sh` can validate.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
All four parts ship together — logo brief, color system, type system, usage guidelines with the tokens export. A part missing its bar is incomplete, not "lite".
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- A new product/company has no visual foundation and needs one defined.
|
|
20
|
-
- A rebrand must consolidate ad-hoc colors, fonts, and one-off logos into a single system.
|
|
21
|
-
- `design` is about to build the site and STOPS because no brand study exists — you produce that study's visual half.
|
|
22
|
-
- The user asks for a logo brief, a palette with documented values, or a type system.
|
|
23
|
-
|
|
24
|
-
Do NOT use — route instead:
|
|
25
|
-
|
|
26
|
-
| Request | Route to | Why |
|
|
27
|
-
| --- | --- | --- |
|
|
28
|
-
| "Write our tone of voice, tagline, naming, messaging pillars" | `../brand-voice/SKILL.md` | Verbal identity — the words, not the pixels. |
|
|
29
|
-
| "Make this landing page look premium / pick layout + motion / ship the Tailwind" | `../design/SKILL.md` | The applied UI layer — it consumes this foundation, it is not it. |
|
|
30
|
-
| "Write the hero headline, value prop, CTA copy" | `../marketing/SKILL.md` | Page words, not the visual system. |
|
|
31
|
-
| "Assemble a press kit — boilerplate, logos-for-press, fact sheet" | `../press-kit/SKILL.md` | Media packaging of finished assets, not system definition. |
|
|
32
|
-
| "Build the investor pitch deck visuals" | `../presentations/SKILL.md` | Deck composition, not the brand foundation. |
|
|
33
|
-
|
|
34
|
-
**The one-line test:** "define what our brand looks like everywhere" → here. "make *this surface* look premium" → `design`.
|
|
35
|
-
|
|
36
|
-
## The deliverable contract (four parts)
|
|
37
|
-
|
|
38
|
-
Every brand-identity engagement ships all four. Each has a MUST-contain bar; a part missing its bar is incomplete, not "lite".
|
|
39
|
-
|
|
40
|
-
1. **Logo brief** — MUST define the variation set (primary / stacked / mark-only / mono), the clear-space rule, minimum sizes, and the file + favicon export matrix. *Why:* a logo that only works in one context is not a system; it breaks the first time someone needs a favicon or a one-color print.
|
|
41
|
-
2. **Color system** — MUST give every color a role (primary / secondary / neutral / accent) and four channels (HEX + RGB + CMYK + OKLCH), document AA contrast pairs, and define light/dark roles. *Why:* HEX alone fails print (no CMYK) and wide-gamut screens (no OKLCH); undocumented contrast ships inaccessible.
|
|
42
|
-
3. **Type system** — MUST name 2–3 typefaces max with a scale, weights, and a one-line pairing rationale. *Why:* more than three families reads as chaos; an undocumented scale gets re-guessed on every screen.
|
|
43
|
-
4. **Usage guidelines** — MUST give do/don't rules, a misuse table, and an exported W3C-format `design-tokens.json`. *Why:* the tokens file is the hand-off contract; without it `design` re-derives your palette by eye and drifts.
|
|
17
|
+
The one-line boundary test: "define what our brand looks like everywhere" → here. "make *this surface* look premium" → `design`.
|
|
44
18
|
|
|
45
19
|
## Logo brief
|
|
46
20
|
|
|
47
21
|
Specify a system, not a single picture. The mark must survive from favicon to billboard, in color and in one ink.
|
|
48
22
|
|
|
49
|
-
- **Variation set** — primary (horizontal lockup), stacked (vertical, for square/tight slots), mark-only (the symbol alone, for avatars/favicons), monochrome (single-ink: black, white-knockout). A logo
|
|
23
|
+
- **Variation set** — primary (horizontal lockup), stacked (vertical, for square/tight slots), mark-only (the symbol alone, for avatars/favicons), monochrome (single-ink: black, white-knockout). A logo with no mono version fails the moment it lands on a colored background or a fax. Test the mono version first; if it dies in one color, the design is too fragile.
|
|
50
24
|
- **Clear space** — define it relative to the mark, not in fixed px, so it scales: clear space = the cap-height (or x-height of the mark) on all four sides. Nothing intrudes inside it.
|
|
51
25
|
- **Minimum size** — below this, detail collapses. Defaults: 24px wide digital, 10mm wide print for the full lockup; the mark-only may go smaller (favicon).
|
|
52
|
-
- **Color + mono requirement** — every variation must be reproducible in full color AND in a single ink. Test the mono version first; if it dies in one color, the design is too fragile.
|
|
53
26
|
- **File + favicon matrix** — ship the formats below. SVG is the digital primary (scales, tiny); PNG carries transparency; JPEG is print-safe; 72 DPI digital / 300 DPI print.
|
|
54
27
|
|
|
55
28
|
| Asset | Format | Notes |
|
|
@@ -71,8 +44,8 @@ Full variation grid, clear-space/min-size formulas, and the favicon HTML markup
|
|
|
71
44
|
Assign roles first, values second. A color with no role is decoration waiting to be misused.
|
|
72
45
|
|
|
73
46
|
- **Role taxonomy** — 2–3 primary (the brand's signature), 2–3 secondary (support), a neutral ramp (text, surfaces, borders), and exactly **one accent** reserved for CTAs/highlights. One accent keeps "click here" unambiguous.
|
|
74
|
-
- **Four channels, every color** — HEX (web), RGB (screen math), CMYK (print), OKLCH (perceptual + wide-gamut). The W3C Design Tokens Color Module (2025.10) supports CSS Color 4 spaces including OKLCH and Display P3, so wide-gamut color lives in the token file natively — author in OKLCH and let HEX be the fallback.
|
|
75
|
-
- **AA contrast pairing
|
|
47
|
+
- **Four channels, every color, no exceptions** — HEX (web), RGB (screen math), CMYK (print), OKLCH (perceptual + wide-gamut). This one is absolute because a HEX-only palette silently breaks the two places nobody tests: print (no CMYK) and wide-gamut screens (no OKLCH). The W3C Design Tokens Color Module (2025.10) supports CSS Color 4 spaces including OKLCH and Display P3, so wide-gamut color lives in the token file natively — author in OKLCH and let HEX be the fallback.
|
|
48
|
+
- **AA contrast pairing** — every text-on-background pair you document clears WCAG 2 AA: **4.5:1 normal text, 3:1 large text** (≥18.66px bold or ≥24px). Not negotiable — it is a conformance threshold, not a taste call, and shipping under it ships an inaccessible product. AAA is 7:1 / 4.5:1 — reach for it on body text where you can. Pair colors explicitly ("`fg` on `bg`: 12.4:1 ✓").
|
|
76
49
|
- **Logo-text exemption caveat** — WCAG 1.4.3 exempts logos and brand-name text from the contrast minimums. But a *typed* sub-brand or tagline that is plain text (not a graphical logo) IS subject to text-contrast rules. Mark logo-only tokens exempt; hold everything else to 4.5:1.
|
|
77
50
|
- **Light/dark roles** — define the role in both schemes from day one (`bg`/`fg` invert, brand stays anchored). Retrofitting dark mode onto a light-only palette produces muddy, low-contrast surfaces.
|
|
78
51
|
|
|
@@ -89,7 +62,7 @@ Two to three typefaces, no more. Most brands need exactly two: one display (head
|
|
|
89
62
|
|
|
90
63
|
## Emit the tokens (the hand-off contract)
|
|
91
64
|
|
|
92
|
-
|
|
65
|
+
Ship `design-tokens.json` even when the client only asked for a PDF — it is the one artifact `design` can read, and without it the palette gets re-derived by eye and drifts. Use the **W3C Design Tokens format**, which reached its first stable version (2025.10) on 2025-10-28 — a vendor-neutral JSON for sharing design decisions, with light/dark and multi-brand themes via group inheritance / `$extends`.
|
|
93
66
|
|
|
94
67
|
```json
|
|
95
68
|
{
|
|
@@ -126,9 +99,9 @@ Full tokens file with light/dark via `$extends`, the Tailwind v4 `@theme` mappin
|
|
|
126
99
|
|
|
127
100
|
## Usage guidelines + anti-patterns
|
|
128
101
|
|
|
129
|
-
State the misuse rules explicitly — the gap a brand book exists to close is the well-meaning teammate who stretches the logo to fit.
|
|
102
|
+
State the misuse rules explicitly — the gap a brand book exists to close is the well-meaning teammate who stretches the logo to fit.
|
|
130
103
|
|
|
131
|
-
|
|
|
104
|
+
| Misuse in the wild | Why it breaks / Fix |
|
|
132
105
|
| --- | --- |
|
|
133
106
|
| "Stretch the logo to fill the space" | Non-uniform scaling distorts the mark. Lock aspect ratio; pick the variation that fits (stacked vs primary). |
|
|
134
107
|
| "This blue is close enough" | Off-palette colors fracture recognition. Use the token; if a need is unmet, add a role, don't eyeball one. |
|
|
@@ -151,11 +124,12 @@ The skill emits a checkable artifact, so verify it before claiming done. Run aga
|
|
|
151
124
|
|
|
152
125
|
It checks: the file parses as JSON; required color roles are present (primary, neutral, accent at minimum); every color token carries a HEX value; and, for each documented text/background pair (declared via `$extensions["com.risco.contrast"]` pairs), it computes the WCAG relative-luminance contrast ratio and **fails any normal-text pair below 4.5:1**. Logo-only tokens are exempt. On an empty or clean target it exits 0 — no false failures.
|
|
153
126
|
|
|
154
|
-
##
|
|
127
|
+
## Boundary + hand-off
|
|
155
128
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
- `../
|
|
129
|
+
| Request | Route to | Why |
|
|
130
|
+
| --- | --- | --- |
|
|
131
|
+
| Tone of voice, tagline, naming, messaging pillars | `../brand-voice/SKILL.md` | Verbal identity — the words, not the pixels. Pair it with this so copy and visuals agree. |
|
|
132
|
+
| Make this page premium, pick layout + motion, ship the Tailwind | `../design/SKILL.md` | The applied UI layer: it reads `design-tokens.json` and builds the accessible, fast UI. This skill produces the brand study's visual half that `design` STOPS without. |
|
|
133
|
+
| Hero headline, value prop, CTA copy | `../marketing/SKILL.md` | Page words, not the visual system. |
|
|
134
|
+
| Press kit — boilerplate, logos-for-press, fact sheet | `../press-kit/SKILL.md` | Media packaging of finished assets, not system definition. |
|
|
135
|
+
| Investor pitch deck visuals | `../presentations/SKILL.md` | Deck composition consuming the tokens, not the brand foundation. |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brand-voice
|
|
3
|
-
description: "Use when defining
|
|
3
|
+
description: "Use when defining how a brand SOUNDS as a reusable system: adjectives turned into linguistic rules, four tone dimensions as ratios, a use/avoid word bank, an AI voice-DNA block — so content stops sounding like five different writers. NOT the finished copy written against it (that is `landing-copy` / `marketing`), NOT the brand's look (`brand-identity`)."
|
|
4
4
|
tags: [brand-voice, tone-of-voice, messaging, brand, voice-guide]
|
|
5
5
|
recommends: [landing-copy, brand-identity, marketing, content-engine, customer-support]
|
|
6
6
|
origin: risco
|
|
@@ -8,32 +8,9 @@ origin: risco
|
|
|
8
8
|
|
|
9
9
|
# Brand Voice — How the Brand Sounds
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
You own the **reusable voice-and-tone system**: 3–5 personality traits → concrete linguistic rules → a position on the four tone dimensions → a use/avoid word bank → a tone-by-context matrix → a paste-into-the-prompt voice-DNA block. The output is a persisted document, never a finished piece of copy.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
## When to use / When NOT
|
|
16
|
-
|
|
17
|
-
Use when:
|
|
18
|
-
|
|
19
|
-
- A brand has no voice guide, or has one that is just a list of adjectives nobody can apply.
|
|
20
|
-
- Fuzzy adjectives ("bold, warm, expert") must become rules a writer or LLM can follow.
|
|
21
|
-
- Building the word bank: power words to lean on, words/phrases to ban.
|
|
22
|
-
- Specifying how tone shifts by context (error vs. celebration vs. legal) while voice stays constant.
|
|
23
|
-
- Producing the AI voice-DNA block to paste into a system prompt so generated copy stays on-brand.
|
|
24
|
-
- Auditing existing copy for off-brand drift against a defined voice.
|
|
25
|
-
- The drift symptom: "our blog, emails, and support replies all sound like different people."
|
|
26
|
-
|
|
27
|
-
Do NOT use when (route to the sibling that owns it):
|
|
28
|
-
|
|
29
|
-
- Writing the hero / value prop / CTA / section copy of a page → `landing-copy`.
|
|
30
|
-
- Writing launch emails, channel posts, or finished marketing pieces → [`../marketing/SKILL.md`](../marketing/SKILL.md), and for blog/article systems → `content-engine`, `article-writing`, `newsletter`, `social-publisher`.
|
|
31
|
-
- Logo, color, type, visual identity, design tokens → `brand-identity`.
|
|
32
|
-
- Visual/UX layout, motion, component look → [`../design/SKILL.md`](../design/SKILL.md).
|
|
33
|
-
- An investor narrative or sales deck → [`../pitch-deck/SKILL.md`](../pitch-deck/SKILL.md).
|
|
34
|
-
- Replying to a live customer ticket in-tone → `customer-support` (it consumes this guide; it does not author it).
|
|
35
|
-
|
|
36
|
-
The line: **brand-voice owns the reusable definition of how the brand sounds.** The moment you write one finished piece against it, that is a copywriting skill. The way the brand *looks* is `brand-identity`.
|
|
13
|
+
The line: **brand-voice owns the reusable definition of how the brand sounds.** The moment you write one finished piece against it, that is a copywriting skill — page hero/value prop/CTA is `landing-copy`; launch emails and channel posts are [`../marketing/SKILL.md`](../marketing/SKILL.md); blog and article systems are `content-engine`, `article-writing`, `newsletter`, `social-publisher`; an investor narrative is [`../pitch-deck/SKILL.md`](../pitch-deck/SKILL.md); a live customer ticket is `customer-support` (it consumes this guide, it does not author it). The way the brand *looks* — logo, color, type, design tokens — is `brand-identity`, and layout/motion is [`../design/SKILL.md`](../design/SKILL.md).
|
|
37
14
|
|
|
38
15
|
## Voice vs. tone (the load-bearing distinction)
|
|
39
16
|
|
|
@@ -150,7 +127,7 @@ Tone by context: onboarding=warm; error=plain+reassuring, no humor;
|
|
|
150
127
|
success=light warmth, no hype; billing=precise+calm; legal=formal+exact.
|
|
151
128
|
```
|
|
152
129
|
|
|
153
|
-
**Persist it.** Write the compiled guide under `02-DOCS/wiki/brand/voice-guide.md` and the voice-DNA block beside it, per the `harness` Karpathy-wiki convention (compiled brand articles under `02-DOCS/wiki/brand/`, raw user inputs under `02-DOCS/raw/brand/`). The persisted file is an OKF v0.1 wiki article: open it with YAML frontmatter carrying a non-empty `type:` (use `type: brand-voice`) — see the frontmatter block in [`references/voice-guide-template.md`](references/voice-guide-template.md). This is the exact study `marketing`, `landing-copy`, and `content-engine` read to ground their copy. A guide in a slide deck is invisible to them.
|
|
130
|
+
**Persist it.** Write the compiled guide under `02-DOCS/wiki/brand/voice-guide.md` and the voice-DNA block beside it, per the `harness` Karpathy-wiki convention (compiled brand articles under `02-DOCS/wiki/brand/`, raw user inputs under `02-DOCS/raw/brand/`). The persisted file is an OKF v0.1 wiki article: open it with YAML frontmatter carrying a non-empty `type:` (use `type: brand-voice`) — see the frontmatter block in [`references/voice-guide-template.md`](references/voice-guide-template.md), which is also the fill-in-the-blanks skeleton for the whole guide (traits → rules → 4-D ratios → word bank → context matrix → voice-DNA block) with one fully worked mini-example brand. This is the exact study `marketing`, `landing-copy`, and `content-engine` read to ground their copy. A guide in a slide deck is invisible to them.
|
|
154
131
|
|
|
155
132
|
## Auditing for drift
|
|
156
133
|
|
|
@@ -174,10 +151,6 @@ Off-brand reads like everyone else: abstract nouns, hedged claims, AI tells, ene
|
|
|
174
151
|
| Guide lives in a deck or someone's head | Downstream skills and LLMs can't read it | Persist machine-readable under `02-DOCS/wiki/brand/` |
|
|
175
152
|
| Writing the actual landing/email/article | That is a finished piece, not the definition | Stop; hand to `landing-copy` / `marketing` / `content-engine` |
|
|
176
153
|
|
|
177
|
-
## Templates
|
|
178
|
-
|
|
179
|
-
A fill-in-the-blanks guide (traits → rules → 4-D ratios → word bank → context matrix → voice-DNA block) with one fully worked mini-example brand lives in [`references/voice-guide-template.md`](references/voice-guide-template.md). The universal ban list and power-word derivation method are in [`references/word-bank.md`](references/word-bank.md).
|
|
180
|
-
|
|
181
154
|
## Verify
|
|
182
155
|
|
|
183
156
|
`scripts/verify.sh <guide.md>` is a read-only structural linter for a produced voice guide: it checks the required sections are present (traits, rules with Bad→Good, four-dimension ratios, a non-empty ban list, context matrix, voice-DNA block), flags a trait count outside 3–5, warns on brand-neutral filler used as a trait, and greps the guide's own prose for words it lists in its own ban list (self-consistency). Empty or clean input exits 0 — no false failure.
|