154 lines
7.3 KiB
Markdown
154 lines
7.3 KiB
Markdown
---
|
|
name: unslop
|
|
description: Cut AI tells from anything written in my projects. Apply to all prose I ship, including code comments, godoc, error strings, log lines, Svelte UI copy, docs, READMEs, and commit messages. Always apply.
|
|
---
|
|
|
|
# Unslop
|
|
|
|
Edit text so it reads like a person who works on this codebase wrote it. This
|
|
covers every writing surface in a Go/Svelte project: godoc and code comments,
|
|
error and log messages, UI copy, markdown docs, commit messages, and PR
|
|
descriptions.
|
|
|
|
## Process
|
|
|
|
1. Scan for the patterns below.
|
|
2. Rewrite. Preserve meaning, match the surrounding voice.
|
|
3. Self-audit: "What makes this obviously AI generated?" Fix remaining tells.
|
|
|
|
## Voice
|
|
|
|
- Have opinions. State what happened and what it means, don't neutrally list.
|
|
- Vary rhythm. Short sentences. Then longer ones that take their time.
|
|
- Be specific. Not "this can cause issues" but "the client stays disconnected
|
|
and the request times out after 2m".
|
|
- If a sentence could appear unchanged in another project's docs, it says
|
|
nothing about this one. Cut it.
|
|
- Match the existing voice. When two docs cover sibling features, they should
|
|
read like the same person wrote both: same structure, same phrasing for the
|
|
same concepts, same level of detail.
|
|
|
|
## Go code comments
|
|
|
|
- Every commented element (func, struct, var) gets a comment whose first
|
|
word is the element's name, written as a complete sentence ending in a
|
|
period. `// ParseSize converts a human-readable size ("2.5G") to bytes.`
|
|
- A comment states a constraint the code can't show, a real-world fact, or
|
|
the regression it guards. Never a narration of the next line, where the
|
|
code came from, or why the change is correct. That last kind is
|
|
review-speak and turns into noise the moment the change merges.
|
|
- The exception to the no-narration rule: a function with multiple logical
|
|
steps uses short section comments to label each phase. "Validate input.",
|
|
"Persist to database.", "Build response." Those segment the function;
|
|
they don't narrate individual lines.
|
|
- Operational tone, written for someone maintaining or debugging the
|
|
system. No conversational language, jokes, or speculative notes.
|
|
- Name the external source when there is one: the distro, the tool version,
|
|
the kernel behavior. Naming the exact distro quirk the branch exists for
|
|
beats "handle legacy services".
|
|
- Spell out arithmetic so numbers aren't magic:
|
|
`// reallocated 8 -> 40+40 capped 80; total 89 -> REPLACE_SOON.`
|
|
- Match the file's comment density. A file with sparse comments doesn't get
|
|
a narrated paragraph bolted onto one function.
|
|
|
|
## Errors and logs
|
|
|
|
- Error strings: lowercase, no trailing punctuation, no "Error:" prefix.
|
|
Chain context with colons or `%w`: `syncing repo: connecting to source:
|
|
connection refused`. Say what was being attempted, not "failed to failed
|
|
to".
|
|
- An error the operator will read should point at the fix when one is known:
|
|
"set license.key in the config, or pass --license-key".
|
|
- Log messages: terse, lowercase, structured fields for the variables, no
|
|
exclamation marks, no emoji. `task executed` with fields beats "Task was
|
|
executed successfully!".
|
|
- Never log or print chatbot phrases: "Successfully completed!", "Oops!",
|
|
"Something went wrong :(".
|
|
|
|
## Svelte and UI copy
|
|
|
|
- Sentence case everywhere: buttons, labels, headings, menu items. "Import
|
|
test", not "Import Test".
|
|
- Error states name what failed and what to do next. Not "Oops! Something
|
|
went wrong" but "the server is unreachable; check that the service is
|
|
running".
|
|
- Empty states say what will appear there or how to add the first item. No
|
|
cutesy filler, no illustrations-with-quips tone.
|
|
- No exclamation marks in UI text. No emoji in buttons, headings, toasts, or
|
|
placeholder text.
|
|
- Labels are literal. A field for a slug says "Slug", not "Your unique
|
|
identifier". Tooltips explain the consequence of the setting, not restate
|
|
its name.
|
|
- No marketing adjectives in product UI: "powerful", "seamless", "blazing
|
|
fast". The interface should describe, not sell.
|
|
|
|
## Docs and READMEs
|
|
|
|
- Say the thing directly. If a sentence can be replaced by a plainer one
|
|
that says the same thing, replace it.
|
|
- A doc stands alone for its task. Don't make the reader open a second doc
|
|
to use the first one; inline the few lines they need.
|
|
- Don't restate. If an example already appeared in an earlier section, later
|
|
sections reference it, they don't duplicate it.
|
|
- Don't explain external systems. A doc about configuring a third-party
|
|
integration covers how to configure it here and why, not how the third
|
|
party's API works.
|
|
- Structure follows the sibling doc. Same heading shapes, same table format,
|
|
same key: value conventions, so the docs read as one set.
|
|
- README covers how to build and test via the Makefile, actual usage, and
|
|
real configuration. No badge walls, no "Features" bullet lists of
|
|
adjectives, no roadmap promises.
|
|
- Headings in sentence case. No decorative emoji. No bold on every proper
|
|
noun.
|
|
|
|
## Commits and PRs
|
|
|
|
- Imperative, plain, specific: "Switch unit tests to testify", "Replace
|
|
polling with retry backoff". No "This PR introduces...", no "Enhanced",
|
|
no scope theater.
|
|
- The body states what changed and why, names the bug or behavior pinned,
|
|
and stops. No summary tables of the diff, no "Testing" section that just
|
|
says tests pass.
|
|
|
|
## Language tells
|
|
|
|
- AI vocabulary: additionally, crucial, delve, enhance, fostering, garner,
|
|
intricate, landscape (abstract), pivotal, robust, seamless, showcase,
|
|
streamline, tapestry, testament, underscore, utilize, leverage. Use the
|
|
plain word.
|
|
- Fancy ways to say "is": "serves as", "stands as", "boasts", "features".
|
|
Say "is" or "has".
|
|
- "Not just X, but Y." State the point directly.
|
|
- Rule of three. Don't force ideas into groups of three; use the natural
|
|
number.
|
|
- Filler: "in order to" becomes "to", "due to the fact that" becomes
|
|
"because", "it is important to note that" gets deleted.
|
|
- Hedging stacks: "could potentially possibly" becomes "may".
|
|
- Abstract metaphor nouns: substrate, wedge, vector, nexus, primitive (as
|
|
noun), harness (as metaphor), surface (as in "API surface"), scaffolding
|
|
(as metaphor), paradigm, north star, flywheel. Pick the concrete word.
|
|
- Say what it does, not how it feels. "SQL you can read" names a feeling;
|
|
"`.toSQL()` returns the exact string sent to the database" names a
|
|
mechanism. If a sentence can't be restated as a fact, instruction, or
|
|
number, cut it.
|
|
- Active voice. "The compiler validates queries", not "queries are
|
|
validated". Passive only when the actor is unknown or doesn't matter.
|
|
|
|
## Punctuation and style tells
|
|
|
|
- No em dashes, anywhere. Use periods or commas. Don't swap in parentheses
|
|
or en dashes as a substitute; end the sentence instead.
|
|
- Colons before a list or example only, not as mid-sentence connectors.
|
|
- No arrow chains in prose ("A → B → fails"). Write the sentence. Arrows
|
|
are fine inside code and code comments where they're the local idiom.
|
|
- Straight quotes, not curly.
|
|
- Bold sparingly. A bold lead-in that names an item and ends in a period is
|
|
fine; a bold label with a colon that restates the line is a tell.
|
|
- No decorative emoji in headings, bullets, commits, or code.
|
|
|
|
## Chat artifacts
|
|
|
|
Never let these into committed text: "I hope this helps!", "Let me know
|
|
if...", "Great question!", "You're absolutely right!", "Found the smoking
|
|
gun!", cutoff disclaimers like "while specific details are limited". Respond
|
|
directly, write directly.
|