← Commit history

Publish 0.1.0

Ray ·7e02bef381 ·2mo ago ·parent 2d25b9a
7 files changed +230
SKILL.mdadded+130
@@ -0,0 +1,130 @@+---+name: prose-style+description: >+  The Adom house writing style, applied to ALL user-facing copy you write: NO+  em-dashes (use a comma, colon, or period), and cut the tics that make text read+  as AI-generated (delve, seamless, robust, leverage, "it's not just X, it's Y",+  "in today's world"). Write plainly, like a person. Read before writing any+  README, wiki page, release note, chat message, UI string, or docs. Enforce with+  the prose-lint CLI.+---++# Adom House Style++We ship a lot of copy that customers and teammates read: wiki pages, README files,+release notes, chat announcements, UI strings, component descriptions. Much of it+is drafted by an AI, and it too often reads that way. This is the standard for all+of it. The goal is simple: **it should read like a person wrote it.**++Two things give AI writing away, and both are fixable:++1. **Em-dashes.** Models reach for them constantly. People rarely do.+2. **A house dialect** of favorite words and sentence shapes that signal "generated."++Fix both and the copy sounds human.++## Rule 1: No em-dashes++Do not use the em-dash (`—`), the en-dash in prose (`–`), or a spaced double-hyphen+(` -- `) as a substitute. Replace with whatever the sentence needs:++- A **comma** for a light pause: `the PCL runs real boards, not simulations.`+- A **colon** to introduce: `one job: catch em-dashes before they ship.`+- A **period** for two thoughts: `It failed. Here is why.`+- **Parentheses** for a true aside: `the watchdog (every two minutes) pulls master.`++| Instead of | Write |+|---|---|+| `real data — feeding back into our models` | `real data that feeds back into our models` |+| `it works — fast` | `it works, and it's fast` |+| `three sources — JLCPCB, DigiKey, Mouser` | `three sources: JLCPCB, DigiKey, Mouser` |++The en-dash is fine in a genuine number range (`2-5 V`, `pins 3-7`); a hyphen reads+just as clearly there. Everywhere else, rewrite.++## Rule 2: Cut the tell-words++These words cluster in AI copy. Prefer the plain version, or delete.++<!-- prose-lint-disable (the table and examples below name the banned words on purpose) -->++| Tell | Use instead |+|---|---|+| delve into | dig into, look at |+| leverage / utilize | use |+| seamless / seamlessly | smooth, simple, cleanly |+| robust | solid, reliable |+| in-depth | detailed, thorough |+| cutting-edge / state-of-the-art | new, modern |+| showcase | show |+| foster / facilitate | build, help |+| streamline | simplify, speed up |+| empower / unlock / unleash | let, enable |+| myriad / plethora | many |+| meticulous | careful |+| boasts | has |+| game-changer / revolutionize | (just say what changed) |+| realm / landscape / tapestry / testament | (name the actual thing) |++Hype adjectives (`powerful`, `seamless`, `revolutionary`, `world-class`) usually add+nothing. If a claim is true, a concrete number or fact proves it better than an+adjective: not "blazing-fast search" but "search returns in under 20 ms."++## Rule 3: Kill the cadence++Certain sentence shapes are pure AI tell. Rewrite them into a plain statement.++- **"It's not just X, it's Y."** -> say what it is. `It's a search index over three distributors.`+- **"Not only X but also Y."** -> a plain list or two sentences.+- **"In today's fast-paced world..."** -> delete the opener, start with the point.+- **"When it comes to X..."** -> delete; start with X.+- **"That's where X comes in."** -> say what X does.+- **"Whether you're a beginner or an expert..."** -> cut it.+- **"X plays a pivotal role in..."** -> say what X actually does.+- **"Look no further" / "Say goodbye to..."** -> ad-copy cliches; delete.+- **Rule-of-three padding** ("fast, reliable, and scalable") -> keep the one that's true and specific.+- **Rhetorical fragments** ("The result? ...") -> write the full sentence.++<!-- prose-lint-enable -->++## How to write instead++- **Lead with the point.** First sentence says what the thing is or does. No windup.+- **Be concrete.** Names, numbers, file paths, real behavior. Specifics read as human;+  abstractions read as generated.+- **Short, active sentences.** Prefer "the watchdog pulls master" over "master is+  pulled by the watchdog."+- **Say "use", "help", "start", "show".** Plain verbs over Latinate ones.+- **Cut filler.** <!-- prose-lint-disable -->"in order to" -> "to". "a variety of" -> "several" or a count.+  Drop "very", "really", "simply", "actually".<!-- prose-lint-enable -->+- **It's fine to sound like an engineer.** Dry and precise beats polished and vague.++Litmus test: read it aloud. If you would not say it to a colleague at their desk,+rewrite it.++## Where this does NOT apply++- **Code, commands, and identifiers.** A `--flag`, a `2-5 V` range, a filename, a+  URL. Leave them exactly as they are.+- **Direct quotes** from a person or a datasheet. Quote faithfully, em-dashes and all.+- **Established product names.**++## Enforce it: prose-lint++`prose-lint` is the deterministic checker for everything above. Run it before you+ship copy:++```+prose-lint README.md                 # or a wiki page, release notes, any file+cat draft.md | prose-lint            # stdin works too+prose-lint --fix README.md           # apply the safe 1:1 word swaps automatically+```++It reports `line:col`, the rule, and a suggestion, and it is code-aware (it will not+flag a flag in a code span or a real number range). Em-dashes are the hard rule and+fail the check; tell-words and cadence are advisory, because judgment still matters.+`--fix` only handles the unambiguous word swaps. Em-dashes and cadence you rewrite+by hand, using this guide.++Wire it in wherever copy is generated or published: before `adom-wiki page publish`,+in README and component-page generators, and before an announcement goes to chat.
docs/HERO.mdadded+1
@@ -0,0 +1 @@+Put a 1200x630 `hero.png` in this folder. It is the billboard reused on the page header, the homepage, and the screensaver. Until it exists, `adom-wiki pkg lint` reports the hero as the one outstanding item.
docs/hero.htmladded+41
@@ -0,0 +1,41 @@+<!doctype html><html><head><meta charset="utf-8"><style>+  * { margin:0; padding:0; box-sizing:border-box; }+  html,body { width:1200px; height:750px; }+  body { background:#0a0e13; color:#e9eef5; font-family:-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;+    overflow:hidden; position:relative; }+  .glow { position:absolute; inset:0;+    background:radial-gradient(900px 500px at 84% 16%, rgba(88,166,255,.16), transparent 60%),+               radial-gradient(760px 520px at 10% 94%, rgba(0,230,220,.15), transparent 60%); }+  .wrap { position:absolute; inset:0; display:flex; flex-direction:column; justify-content:center; padding:76px 84px; }+  .kicker { font-size:19px; letter-spacing:.30em; text-transform:uppercase; font-weight:700;+    background:linear-gradient(90deg,#00e6dc,#58a6ff 55%,#bc8cff); -webkit-background-clip:text; background-clip:text; color:transparent; }+  h1 { font-size:92px; font-weight:800; letter-spacing:-.03em; margin:14px 0 6px; line-height:1.0; }+  .sub { font-size:33px; font-weight:600; color:#aeb9c6; }+  .accent { height:7px; width:230px; border-radius:6px; margin:26px 0 34px;+    background:linear-gradient(90deg,#00e6dc,#58a6ff 55%,#bc8cff); }+  .card { position:absolute; right:70px; bottom:74px; width:620px; background:#0f151d; border:1px solid #1e2a37;+    border-radius:16px; box-shadow:0 40px 90px rgba(0,0,0,.55); overflow:hidden; }+  .bar { height:38px; background:#131b25; border-bottom:1px solid #1e2a37; display:flex; align-items:center; gap:8px; padding:0 14px;+    font-family:-apple-system,'Segoe UI',sans-serif; }+  .bar span{margin-left:2px; font-size:14px; color:#7d8b9a; letter-spacing:.02em}+  .row { padding:18px 22px; font-size:22px; line-height:1.5; border-bottom:1px solid #1a232e; }+  .row:last-child{border-bottom:none}+  .tag { font-size:13px; letter-spacing:.18em; text-transform:uppercase; font-weight:700; display:block; margin-bottom:6px }+  .bad .tag{ color:#ff6b6b } .good .tag{ color:#00e6dc }+  .bad .txt{ color:#8593a1; text-decoration:line-through; text-decoration-color:#ff6b6b88 }+  .good .txt{ color:#e9eef5 }+  .em{ color:#ff6b6b; font-weight:800 }+</style></head><body>+  <div class="glow"></div>+  <div class="wrap">+    <div class="kicker">Adom Wiki &middot; Global Skill</div>+    <h1>Adom House Style</h1>+    <div class="accent"></div>+    <div class="sub">Write like a person,<br>not a model.</div>+  </div>+  <div class="card">+    <div class="bar"><span>the same sentence, de-AI'd</span></div>+    <div class="row bad"><span class="tag">AI-written</span><span class="txt">real data <span class="em">&mdash;</span> a seamless, robust pipeline that leverages ML.</span></div>+    <div class="row good"><span class="tag">House style</span><span class="txt">real data that feeds a simple, reliable pipeline. It uses ML.</span></div>+  </div>+</body></html>
docs/hero.pngadded
⋯ 1 unchanged line ⋯
install.shadded+7
@@ -0,0 +1,7 @@+#!/bin/sh+set -e++# Symlink your install targets back into the module dir so edits+# propagate and reinstalls do not clobber, e.g.:+#   ln -sfn "$PWD/bin/run" "$HOME/.local/bin/run"+echo "installed"
package.jsonadded+46
@@ -0,0 +1,46 @@+{+  "slug": "prose-style",+  "title": "Prose Style (Adom House Style)",+  "type": "skill",+  "version": "0.1.0",+  "description": "The Adom house writing style. Apply to ALL user-facing copy you write: NO em-dashes (use a comma, colon, or period), and cut the tics that make text read as AI-generated (delve, seamless, robust, leverage, 'it's not just X, it's Y', 'in today's world'). Write plainly, like a person. Read before writing any README, wiki page, release note, chat message, UI string, or docs.",+  "tags": [+    "skill",+    "writing",+    "house-style",+    "copy"+  ],+  "dependencies": {+    "adom/prose-lint": "^0.1.0"+  },+  "discovery_triggers": [+    "write the readme",+    "write release notes",+    "write the wiki page",+    "draft an announcement",+    "make this sound less AI",+    "remove em-dashes",+    "house style",+    "does this read as AI-written"+  ],+  "discovery_pitch": "Read before writing any user-facing copy so it sounds like a person, not a model: no em-dashes, no AI-tells.",+  "sample_prompts": [+    {+      "label": "Write a README",+      "prompt": "write the README for this tool"+    },+    {+      "label": "De-AI a draft",+      "prompt": "this reads AI-generated, rewrite it in our house style"+    }+  ],+  "scripts": {+    "install": "./install.sh",+    "uninstall": "./uninstall.sh"+  },+  "hero": {+    "headline": "Adom House Style",+    "subhead": "No em-dashes. No AI slop. Write like a person.",+    "screenshot": "docs/hero.png"+  }+}
uninstall.shadded+5
@@ -0,0 +1,5 @@+#!/bin/sh+set -e++# Undo what install.sh did (remove the symlinks you created).+echo "uninstalled"