@ericrisco/rsc 1.1.0 → 1.1.2
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 +4 -4
- package/manifest.json +74 -2
- package/package.json +1 -1
- package/scripts/doctor.js +5 -0
- package/scripts/lib/domains.js +2 -2
- package/scripts/lib/starting-point.js +314 -0
- package/scripts/rsc.js +6 -2
- package/skills/bro/SKILL.md +9 -1
- package/skills/bro/evals/cases.yaml +4 -0
- package/skills/design/SKILL.md +3 -1
- package/skills/design/references/brand-grounding.md +1 -1
- package/skills/design/references/design-systems.md +8 -0
- package/skills/design/references/inspiration-sources.md +96 -0
- package/skills/design/references/research-method.md +7 -0
- package/skills/design/references/starting-point.md +75 -0
- package/skills/design-dna/SKILL.md +4 -0
- package/skills/design-loop/SKILL.md +9 -1
- package/skills/eli5/SKILL.md +63 -0
- package/skills/eli5/evals/README.md +22 -0
- package/skills/eli5/evals/cases.yaml +54 -0
- package/skills/pick-ui-library/SKILL.md +1 -0
- package/skills/pick-ui-library/references/component-galleries.md +59 -0
- package/skills/show-me/SKILL.md +140 -0
- package/skills/show-me/evals/README.md +23 -0
- package/skills/show-me/evals/cases.yaml +61 -0
- package/skills/unslop/SKILL.md +114 -0
- package/skills/unslop/evals/README.md +25 -0
- package/skills/unslop/evals/cases.yaml +60 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unslop
|
|
3
|
+
description: "Use when a written text must be audited against a named catalogue of AI tells before it ships: puffery, `not just X but Y`, the rule of three, em dashes, filler, hedging, abstract metaphor nouns. Names each hit and fixes it. NOT the register rewrite in the user's own voice (that is `bro`), NOT a reusable voice guide (that is `brand-voice`)."
|
|
4
|
+
tags: [unslop, ai-tells, editing, audit, slop, publish-check, revisar-texto]
|
|
5
|
+
recommends: [bro, brand-voice, technical-writing]
|
|
6
|
+
profiles: [minimal, core, full]
|
|
7
|
+
origin: risco
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# unslop: the named-tell audit a text passes before it ships
|
|
11
|
+
|
|
12
|
+
`bro` decides how a text should *sound*. This decides whether a text still carries the marks of a
|
|
13
|
+
machine, tell by named tell, on the words that are actually there. Run it on anything about to leave
|
|
14
|
+
the session: a README, a post, an email, a landing page, a commit body.
|
|
15
|
+
|
|
16
|
+
## The pass
|
|
17
|
+
|
|
18
|
+
1. **Scan against the tables below.** Every hit gets located, not sensed. If you cannot name the
|
|
19
|
+
tell, it is not a finding.
|
|
20
|
+
2. **Rewrite in place.** Preserve meaning, facts, numbers, links, commitments and the intended tone.
|
|
21
|
+
3. **Restore the voice** (next section). A text stripped of tells and nothing else reads as sterile,
|
|
22
|
+
which is its own tell.
|
|
23
|
+
4. **Self-audit once more.** Ask: what still makes this obviously machine written? Fix that too.
|
|
24
|
+
5. **Return the text.** On request, return the list of named hits alongside it.
|
|
25
|
+
|
|
26
|
+
## Removing tells is half the job
|
|
27
|
+
|
|
28
|
+
Voiceless writing is as obvious as slopped writing. After the cuts, put something back:
|
|
29
|
+
|
|
30
|
+
- **Have an opinion.** React to the facts instead of listing balanced pros and cons.
|
|
31
|
+
- **Vary the rhythm.** Short sentence. Then a longer one that takes its time and earns the length.
|
|
32
|
+
- **Admit complexity.** "Impressive and slightly unsettling" beats "impressive".
|
|
33
|
+
- **Use "I" when it fits.** First person is not unprofessional.
|
|
34
|
+
- **Allow some mess.** Perfect symmetry looks manufactured.
|
|
35
|
+
- **Be specific.** Not "this is concerning" but "it churns for six hours at 3am and nobody is watching".
|
|
36
|
+
|
|
37
|
+
## Content tells
|
|
38
|
+
|
|
39
|
+
| Tell | Fix |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| Puffery: "pivotal moment", "testament to", "evolving landscape", "indelible mark" | State what happened |
|
|
42
|
+
| Name dropping outlets with no context | Pick one, quote what it said |
|
|
43
|
+
| Decorative `-ing` clauses: "highlighting...", "ensuring...", "showcasing..." | Delete, or expand into a real claim with a source |
|
|
44
|
+
| Promotional adjectives: "nestled", "vibrant", "breathtaking", "renowned", "must-visit" | Neutral description |
|
|
45
|
+
| Vague attribution: "experts believe", "reports suggest", "critics argue" | Name the source or cut the claim |
|
|
46
|
+
| The formulaic challenge arc: "despite challenges, X continues to thrive" | Specific facts instead of the arc |
|
|
47
|
+
|
|
48
|
+
## Language tells
|
|
49
|
+
|
|
50
|
+
| Tell | Fix |
|
|
51
|
+
| --- | --- |
|
|
52
|
+
| AI vocabulary: additionally, crucial, delve, enhance, foster, garner, interplay, intricate, landscape, pivotal, showcase, tapestry, testament, underscore, vibrant | The plain word |
|
|
53
|
+
| Fancy ways to say "is": "serves as", "stands as", "boasts", "features" | "is", "has" |
|
|
54
|
+
| "Not just X, but Y" | State the point directly |
|
|
55
|
+
| Rule of three: forcing every list into three items | The number the facts have |
|
|
56
|
+
| Synonym cycling: protagonist, main character, central figure, hero in one paragraph | Pick one and repeat it |
|
|
57
|
+
| False ranges: "from X to Y" where X and Y share no scale | List the items |
|
|
58
|
+
| Abstract metaphor nouns: substrate, wedge, vector, locus, nexus, primitive, surface, bedrock, scaffolding, paradigm, flywheel, north star, gold-plating, ratchet, evacuate | The concrete word: base, add, way, more than the job needs, move out |
|
|
59
|
+
|
|
60
|
+
## Style and punctuation tells
|
|
61
|
+
|
|
62
|
+
| Tell | Fix |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| Em dashes, anywhere | End the sentence, or use a comma. Swapping in parentheses trades one tell for another |
|
|
65
|
+
| Colons as mid-sentence connectors | Let the point stand as its own sentence. Colons are for lists and examples |
|
|
66
|
+
| Bold on every proper noun and acronym | Bold what the reader must not miss, nothing else |
|
|
67
|
+
| Inline-header lists whose bold label restates the line: "**Performance:** performance improved" | Prose. A bold lead-in that ends in a period and is followed by genuinely new detail is fine |
|
|
68
|
+
| Title Case Headings | Sentence case |
|
|
69
|
+
| Decorative emoji in headings and bullets | Remove |
|
|
70
|
+
| Curly quotes | Straight quotes |
|
|
71
|
+
|
|
72
|
+
## Filler, hedging and plain speech
|
|
73
|
+
|
|
74
|
+
| Tell | Fix |
|
|
75
|
+
| --- | --- |
|
|
76
|
+
| "In order to", "due to the fact that", "it is important to note that" | "To", "because", delete |
|
|
77
|
+
| Stacked hedges: "could potentially possibly be argued that it might" | "may", or the claim itself |
|
|
78
|
+
| Generic conclusion: "the future looks bright" | A specific plan, date or number |
|
|
79
|
+
| Chatbot phrases: "I hope this helps", "let me know if", "certainly", "great question" | Remove |
|
|
80
|
+
| Cutoff disclaimers: "while specific details are limited" | Find the detail or drop the sentence |
|
|
81
|
+
| Sycophancy: "you're absolutely right" | Answer directly |
|
|
82
|
+
| Feeling instead of mechanism: "the database stays close at hand" | The mechanism or the number: "`.toSQL()` returns the exact string sent to the database" |
|
|
83
|
+
| A sentence that would fit unchanged in another project's docs | Cut it. It says nothing about this one |
|
|
84
|
+
| Dense sentences the reader has to reparse | One idea per sentence |
|
|
85
|
+
| Passive with a hidden actor: "queries are validated" | Name the actor: "the compiler validates queries" |
|
|
86
|
+
| Adverbs propping up weak verbs: "runs quickly", "significantly improves" | A stronger verb or the measured number |
|
|
87
|
+
| Fancy synonyms: utilize, leverage, facilitate, numerous, in the event that | use, use, help, many, if |
|
|
88
|
+
|
|
89
|
+
## Anti-patterns
|
|
90
|
+
|
|
91
|
+
| Anti-pattern | Why it fails | Do this instead |
|
|
92
|
+
| --- | --- | --- |
|
|
93
|
+
| Report the tells and leave the text unfixed | The user asked for a clean text, not a diagnosis | Fix in place, list on request |
|
|
94
|
+
| Cut every tell and stop | Sterile prose is the other AI tell | Restore opinion, rhythm and specifics |
|
|
95
|
+
| Rewrite the meaning while cleaning the style | The edit silently changes the claim | Facts, numbers, links and commitments stay exact |
|
|
96
|
+
| Strip a term because it sounds technical | Precision lost to style is a defect | Keep the term, explain it once |
|
|
97
|
+
| Touch code, commands, URLs, quotes or regulated wording | Those are not prose | Leave them byte for byte |
|
|
98
|
+
| Claim the result will pass an AI detector | Nobody can promise that | Promise named tells removed, nothing more |
|
|
99
|
+
| Flatten a voice the author chose on purpose | Some authors do write long, warm or formal | Match the intended tone, cut only the machine marks |
|
|
100
|
+
|
|
101
|
+
## Output boundary
|
|
102
|
+
|
|
103
|
+
Return the cleaned text as an artifact, with no preface. Keep harness commentary, the findings list
|
|
104
|
+
and any compass block clearly outside it, so nothing that is not the text can be copied into an
|
|
105
|
+
email or a document by accident.
|
|
106
|
+
|
|
107
|
+
## Where this ends
|
|
108
|
+
|
|
109
|
+
- **`bro`** owns the register pass: make it sound like a person, in the user's language, fitted to the
|
|
110
|
+
channel and the relationship. A bare "bro" after an answer is always `bro`. This skill is the named
|
|
111
|
+
audit of a text that already exists, before it goes out.
|
|
112
|
+
- **`brand-voice`** owns the standing voice system across writers and channels.
|
|
113
|
+
- **`technical-writing`** owns structure: what belongs in a tutorial, a reference, a README.
|
|
114
|
+
- **`landing-copy`** owns conversion architecture. Clean its words only after it has chosen them.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Evals — unslop
|
|
2
|
+
|
|
3
|
+
The claim under test is the boundary as much as the capability. `bro` sits directly next to this
|
|
4
|
+
skill in the base install, and a description that blurs them costs every user two owners for one
|
|
5
|
+
turn. Half the negatives here exist to prove the split holds.
|
|
6
|
+
|
|
7
|
+
## Triggering
|
|
8
|
+
|
|
9
|
+
Load only `unslop` and run every prompt in 3–5 fresh sessions. A positive passes when `unslop` loads
|
|
10
|
+
in a majority of trials; a negative passes when it stays quiet and the declared `route_to` skill is
|
|
11
|
+
the real owner. Require at least 90% accuracy, and treat any failure on the two `bro` negatives as
|
|
12
|
+
blocking rather than statistical: those are the cases the split was designed for.
|
|
13
|
+
|
|
14
|
+
Run the mirror direction too. `bro`'s own suite carries a negative that routes here; both must pass
|
|
15
|
+
in the same round, or the boundary only exists on one side.
|
|
16
|
+
|
|
17
|
+
## Capability
|
|
18
|
+
|
|
19
|
+
Run the scenario without the skill and with it, same post and one grader, three trials. The
|
|
20
|
+
with-skill condition must satisfy at least 80% of the rubric and beat the baseline by at least 20
|
|
21
|
+
percentage points.
|
|
22
|
+
|
|
23
|
+
Two points discriminate hardest: **naming** the tells by category (a baseline rewrites silently) and
|
|
24
|
+
**preserving** the code block, the price and the URLs (a baseline edits them while tidying). Grade
|
|
25
|
+
both strictly.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
skill: unslop
|
|
2
|
+
|
|
3
|
+
# `unslop` is the named-tell audit of a text that already exists, run before it
|
|
4
|
+
# ships. `bro` is the register pass: sound like a person, in the user's language,
|
|
5
|
+
# fitted to the channel. A bare "bro" is always `bro`; "check this for AI tells
|
|
6
|
+
# before I publish it" is always this skill.
|
|
7
|
+
should_trigger:
|
|
8
|
+
- prompt: "Revisa este README antes de publicarlo y quítale todo lo que huela a IA."
|
|
9
|
+
why: "A pre-publication audit of an existing text is the exact contract, in the user's own words."
|
|
10
|
+
|
|
11
|
+
- prompt: "Unslop this."
|
|
12
|
+
why: "The bare skill name over a text in context is the shortest form of the request."
|
|
13
|
+
|
|
14
|
+
- prompt: "Can you go through this post and tell me which bits read as AI-written, then fix them?"
|
|
15
|
+
why: "Named findings plus a fix is what distinguishes this from a general tone rewrite."
|
|
16
|
+
|
|
17
|
+
- prompt: "Este texto está lleno de guiones largos y de 'no solo X, sino Y'. Límpialo."
|
|
18
|
+
why: "The user names two catalogued tells outright; the fix is the enumerated pass."
|
|
19
|
+
|
|
20
|
+
- prompt: "I keep getting told my docs sound like ChatGPT wrote them. What exactly am I doing?"
|
|
21
|
+
why: "The user wants the tells named, which no other writing skill in the catalog does."
|
|
22
|
+
|
|
23
|
+
- prompt: "Before this goes to the client, strip the puffery and the hedging but keep every number exact."
|
|
24
|
+
why: "A ship gate over existing prose with a preserve-the-facts constraint."
|
|
25
|
+
|
|
26
|
+
should_not_trigger:
|
|
27
|
+
- prompt: "Bro."
|
|
28
|
+
route_to: "bro"
|
|
29
|
+
why: "A bare bro after an answer is the register pass over the last message, not an audit of a supplied text."
|
|
30
|
+
|
|
31
|
+
- prompt: "Haz que este correo suene más cercano y menos formal para un cliente de confianza."
|
|
32
|
+
route_to: "bro"
|
|
33
|
+
why: "Choosing a warmer register for a specific relationship is bro's job; no tell is being audited."
|
|
34
|
+
|
|
35
|
+
- prompt: "Define how our company should sound across the blog, support replies and job ads."
|
|
36
|
+
route_to: "brand-voice"
|
|
37
|
+
why: "A standing voice system across channels is brand-voice, not a one-text audit."
|
|
38
|
+
|
|
39
|
+
- prompt: "Split this mixed README into a tutorial and an API reference with runnable examples."
|
|
40
|
+
route_to: "technical-writing"
|
|
41
|
+
why: "Document structure is technical-writing; unslop edits words, it does not decide document modes."
|
|
42
|
+
|
|
43
|
+
- prompt: "Write the hero headline, the offer and the CTA for our pricing page."
|
|
44
|
+
route_to: "landing-copy"
|
|
45
|
+
why: "Conversion architecture and net-new copy belong to landing-copy; the audit comes after."
|
|
46
|
+
|
|
47
|
+
- prompt: "Translate this announcement into Catalan and adapt the date formats."
|
|
48
|
+
route_to: "translation-l10n"
|
|
49
|
+
why: "Translation and locale adaptation are owned elsewhere, even though good prose matters there too."
|
|
50
|
+
|
|
51
|
+
capability:
|
|
52
|
+
- scenario: "A 400-word product-launch blog post that opens with 'In today's rapidly evolving landscape', uses four em dashes, three bold-label bullets whose labels restate their lines, 'not just faster, but smarter', 'experts agree', two stacked hedges, and closes with 'the future looks bright'. It also contains a code block, a pricing figure of EUR 39/month and two URLs."
|
|
53
|
+
must_include:
|
|
54
|
+
- "names the tells it found by category rather than reporting a general impression"
|
|
55
|
+
- "removes every em dash without substituting parentheses or en dashes"
|
|
56
|
+
- "converts the bold-label bullets whose label restates the line into prose, and leaves any bold lead-in that adds new detail"
|
|
57
|
+
- "replaces 'experts agree' with a named source or cuts the claim"
|
|
58
|
+
- "keeps the code block, the EUR 39/month figure and both URLs byte for byte"
|
|
59
|
+
- "leaves the text with a voice: at least one specific, opinionated sentence rather than sterile neutrality"
|
|
60
|
+
- "returns the cleaned text as the artifact, with the findings list kept outside it"
|