Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions humanizer-classics/.github/ISSUE_TEMPLATE/new-book.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
name: New book proposal
about: Propose adding a new foundational writing book to the canon
title: "[New book] "
labels: book-proposal
---

## Book

**Title:** *...*
**Author:** ...
**Edition + year:** ...
**Publisher:** ...
**ISBN (optional):** ...

## Why this book belongs in humanizer-classics

3-5 sentences on what this book teaches that the existing rules don't already cover. What's the unique angle? Who is this book for? When does its advice matter most?

## Proposed rule prefix

E.g., `W` is taken (Wikipedia), `Z` is taken (Zinsser), `S` is taken (Strunk & White), `H` is taken (HBR Guide). Pick a single letter not already used — usually the first letter of the author's last name. Confirm by checking `references/_rule-index.md`.

## Proposed rule list

Sketch 3-7 rules you'd add from this book. Each should have:

- **Rule name** (one line, imperative)
- **Source** (chapter, page)
- **What it adds** (why this rule isn't already covered by Z/S/H/W)

Format:

| ID | Rule name | Source | What it adds |
|----|-----------|--------|--------------|
| X-1 | ... | ch. N | ... |
| X-2 | ... | ch. N | ... |
| X-3 | ... | ch. N | ... |

## Voice and pull-quote sample

Paste 1-2 short pull-quotes (10-25 words each) you'd plan to cite. This helps reviewers gauge whether the book's voice fits the project.

## License / fair use

Confirm:

- [ ] You can cite the book under fair use for short pull-quotes (10-25 words for educational commentary)
- [ ] You're not proposing to reproduce extended excerpts, chapter summaries, or proprietary material

## Plan

- [ ] I plan to submit the PR myself
- [ ] I'm flagging this for a maintainer to pick up

If submitting yourself, see `CONTRIBUTING.md` for the file format and the acceptance bar. The PR should include:

- A new file at `references/<author>-<short-title>.md`
- Updates to `references/_rule-index.md` (add the new rule rows + cross-references)
- Updates to `SKILL.md` (add the new book's rules to the catalog and the references list)
- Updates to `README.md` ("Books currently included")
- At least one new corpus sample at `tests/corpus/` exercising rules from this book
- A version bump (minor — e.g., 3.0.x → 3.1.0)

## Acknowledgments

Anyone you'd like credited (yourself, the book's author, anyone whose review helped shape the proposal).
73 changes: 73 additions & 0 deletions humanizer-classics/.github/ISSUE_TEMPLATE/new-rule.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
name: New rule proposal
about: Propose a new rule for an existing book file (or for the Wikipedia detection layer)
title: "[New rule] "
labels: rule-proposal
---

## Source

Which book is this rule from?

- [ ] Zinsser, *On Writing Well*
- [ ] Strunk & White, *The Elements of Style*
- [ ] Garner, *HBR Guide to Better Business Writing*
- [ ] Wikipedia, *Signs of AI writing* (detection layer)
- [ ] Other (please specify and consider opening a `new-book` issue instead)

**Specific reference:** chapter, section, or page number — be precise so the rule can be traced back to the source.

## Proposed rule ID

E.g., `Z-7`, `S-6`, `H-6`. Check `references/_rule-index.md` to confirm the next available number.

## One-line rule name

Imperative or prescriptive form. E.g., "Cut throat-clearing openers" or "Use the active voice."

## Pull-quote (10-25 words from the source)

> "..."
> — Author, ch. N

## Detection cue

What pattern in the input text signals this rule should fire? Be specific — keywords, sentence shapes, or structural tells.

## Problem

2-4 sentences. What does the LLM do wrong? Why does it sound off to a human reader?

## Before / After

**Before**
> [Realistic AI-generated text — not a strawman]

**After**
> [The same passage rewritten following the rule]

## Cross-references

Which existing W-rules does this rule help fix? Which other book rules does it interlock with?

## Context tags

Which contexts should this rule fire in? Pick from: `all`, `memo`, `email`, `blog`, `book-draft`, `technical-doc`, `dictation`, `meeting-notes`. Justify if you're picking a non-obvious set.

## Why this rule isn't a duplicate

How does this rule add something the existing rules don't already cover? If it's a sharper version of an existing rule, why does the project benefit from both?

## Acceptance bar self-check

- [ ] Traceable to a specific page or chapter
- [ ] Maps to a real AI-failure mode
- [ ] Adds something the existing rule set doesn't cover
- [ ] Before/after example is realistic, not a strawman
- [ ] Detection cue is specific enough to actually find the pattern
- [ ] "How to apply" gives a mechanical move

## I plan to submit a PR

- [ ] Yes, I'll open the PR (one rule per PR per `CONTRIBUTING.md`)
- [ ] No, I'm flagging this for a maintainer to pick up
64 changes: 64 additions & 0 deletions humanizer-classics/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Changelog

All notable changes to humanizer-classics. Format roughly follows [Keep a Changelog](https://keepachangelog.com/).

## [3.0.0] — 2026-04-29

### Added

- Initial v3 release as a fork of `humanizer` v2.5.1.
- New architecture: slim `SKILL.md` dispatcher (~250 lines) + per-source `references/` files lazy-loaded as rules fire.
- 24 new craft rules sourced from foundational writing books, each with a citation and pull-quote verified against the source PDFs:
- **Zinsser, *On Writing Well*** (25th Anniversary Edition, 6th ed., HarperResource, 2001) — Z-1 through Z-10:
- Z-1: Cut clutter — every word that does no work (Ch. 3)
- Z-2: Use short, plain, Anglo-Saxon words (Ch. 3, Ch. 6)
- Z-3: Active verbs do the work; kill nominalizations (Ch. 10)
- Z-4: Strip qualifiers (Ch. 10 — Little Qualifiers)
- Z-5: Be present on the page; have a self (Ch. 4)
- Z-6: Endings matter — quit when the work is done (Ch. 9)
- Z-7: A lead must capture the reader immediately (Ch. 9)
- Z-8: Maintain unity of pronoun, tense, and mood (Ch. 8)
- Z-9: Most adjectives and adverbs are unnecessary (Ch. 10)
- Z-10: Write for yourself, not for an imagined mass audience (Ch. 5)
- **Strunk & White, *The Elements of Style*** (4th ed., 1999) — S-1 through S-9:
- S-1: Omit needless words (II.17)
- S-2: Use the active voice (II.14)
- S-3: Put statements in positive form (II.15)
- S-4: Use definite, specific, concrete language (II.16)
- S-5: Do not overstate (V.7)
- S-6: Express coordinate ideas in similar form — parallel construction (II.19)
- S-7: Place the emphatic words of a sentence at the end (II.22)
- S-8: Avoid a succession of loose sentences — mechanical singsong (II.18)
- S-9: Do not affect a breezy manner — calibrating partner to Z-5 (V.9)
- **Garner / HBR, *HBR Guide to Better Business Writing*** (1st ed., 2012) — H-1 through H-5:
- H-1: Lead with the bottom line (pyramid principle)
- H-2: Write for the skim-reader
- H-3: One idea per paragraph
- H-4: Imperative for instructions
- H-5: Cut throat-clearing openers
- `context_tags:` field on every rule for conflict resolution across forms (memo, email, blog, book-draft, technical-doc, dictation, meeting-notes).
- Cross-reference graph in `references/_rule-index.md` mapping detection rules (W) to fix rules (Z/S/H).
- Granola live integration via `mcp__granola__list_meetings`, `mcp__granola__get_meeting_transcript`, etc. Workflow documented in `references/granola-meeting-transcripts.md`.
- Wispr Flow dictation guidance (no MCP integration; comes through as pasted text).
- `tests/corpus/` with golden samples + `tests/REVIEWING.md` for manual reviewer checklist.
- `CONTRIBUTING.md` with one-rule-per-PR norm, rule acceptance bar, pull-quote licensing.
- GitHub issue templates: `new-rule.md`, `new-book.md`.

### Changed

- 29 Wikipedia "Signs of AI writing" rules renamed from numeric IDs (1-29) to prefixed IDs (W-1 through W-29) and lifted verbatim into `references/wikipedia-signs-of-ai-writing.md`. Content unchanged.
- Two-pass humanization process now context-aware: the chosen context tag governs which book rules fire. (E.g., Z-5 "be present on the page" doesn't fire on memo or technical-doc contexts; H-1 "lead with bottom line" doesn't fire on book-draft contexts.)
- Voice calibration section retained from v2.x verbatim.
- Personality and soul section retained from v2.x verbatim.

### Migrated from v2.x

- All 29 rules (Wikipedia "Signs of AI writing")
- Voice calibration feature
- Two-pass audit process
- Personality and soul guidance
- Full example with before/draft/audit/after

### Note on coexistence with v2.x

`humanizer-classics` is a fork, not a replacement. `humanizer` v2.5.1 remains stable for current users at `~/.claude/skills/humanizer/`. v3 installs alongside as `~/.claude/skills/humanizer-classics/`. Future work may merge them once v3 has proven out.
122 changes: 122 additions & 0 deletions humanizer-classics/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Contributing to Humanizer Classics

Thanks for helping make this a better tool for people who want their AI-assisted writing to sound human. This is meant to be an ongoing repository — new books, new rules, refinements to existing ones — and contributions from people who actually do this work for a living are the point.

## What you can contribute

| Contribution | Effort | PR shape |
|--------------|--------|----------|
| Add a new rule to an existing book | Small | One rule per PR, ~30 lines |
| Refine an existing rule (better example, sharper detection cue) | Small | One rule per PR |
| Add a new book reference file | Medium | One book per PR, 3-7 rules |
| Add a new corpus sample to `tests/corpus/` | Small | One sample pair per PR |
| Refine the Granola/Wispr workflow | Medium | Update `references/granola-meeting-transcripts.md` |
| Propose architectural changes | Large | Open an issue first, discuss before PR |

## One rule per PR

The repo follows a *one rule per PR* norm. This matches the cadence the upstream `humanizer` repo has used since v2.0 (e.g., commits "Add passive voice rule (#80)", "feat: add hyphenated word pair overuse pattern (#42)"). Small PRs are easier to review, easier to revert, and force each rule to stand on its own.

If your rule depends on another change (e.g., a new book file), bundle the dependency into the same PR — but keep the *first new rule* in the same PR as the book file, so reviewers can see the rule format in context.

## How to add a new rule

1. **Decide which book file it belongs to.** If the rule is sourced from one of the existing books, add it there. If it's from a new book, copy `references/_template-book-rules.md` to `references/<author>-<short-title>.md` and start with that template.

2. **Follow the rule format.** Every rule has these sections, in order:
- `### <ID>. <One-line rule name in imperative or prescriptive form>`
- `**Source:**` — book, edition, chapter, page (as specifically as you can)
- **Pull-quote** — 10-25 words from the source, attributed
- `**Cross-references:**` — which W-rules this helps fix; which other book rules it interlocks with
- `**Context tags:**` — `all` or any combination of `memo`, `email`, `blog`, `book-draft`, `technical-doc`, `dictation`, `meeting-notes`
- `**Detection cue:**` — what pattern in the text signals this rule should fire
- `**Problem:**` — 2-4 sentences on the failure mode and why it sounds off
- `**Before** / **After**` — a realistic, non-strawman example pair
- `**How to apply:**` — the mechanical move; 1-3 sentences a writer can run on autopilot

3. **Update `references/_rule-index.md`** — add a row to the rule-ID table and (if applicable) a row to the cross-reference graph.

4. **Add a corpus sample if the rule introduces a new pattern.** Drop a `*.md` + `*.expected-fixes.md` pair into `tests/corpus/` showing the rule firing.

5. **Bump the version.** See *Versioning* below.

6. **Run the validator and manual review** before opening the PR:
```bash
cd humanizer-classics/
python3 tests/validate.py
```
The validator catches structural problems (broken references, missing sections, inconsistent rule IDs) automatically. Then run the manual review in `tests/REVIEWING.md` to catch behavioral issues.

## How to add a new book

1. **Copy the template.** `cp references/_template-book-rules.md references/<author>-<short-title>.md`. Use kebab-case: `williams-style-lessons-in-clarity-and-grace.md`, `pinker-sense-of-style.md`.

2. **Pick a single-letter rule prefix not already used.** Currently used: W, Z, S, H. The prefix should be the first letter of the author's last name when possible.

3. **Write 3-7 rules following the format above.** 5 is the sweet spot — enough to be useful, few enough to review thoroughly.

4. **Update `SKILL.md`** — add the new book's rules to the *Craft rules* table and to the references list at the bottom.

5. **Update `references/_rule-index.md`** — add the new rule rows.

6. **Update `README.md`** — add the book to the "Books currently included" list.

7. **Add corpus samples** that exercise the new rules.

8. **Bump the version** (minor bump for a new book — see *Versioning*).

## Rule acceptance bar

A rule is ready to merge when:

- ✅ It traces to a specific page or chapter in a real, citable source
- ✅ It maps to a real AI-failure mode (not just generic "good writing" advice)
- ✅ It does something the existing rules don't already cover, or it covers them better with a positive prescription
- ✅ The before/after example is realistic AI-generated text, not a strawman
- ✅ The detection cue is specific enough that a reader (or a model) can find the pattern
- ✅ The "How to apply" gives a mechanical move, not a vague exhortation

A rule is **not** ready when:

- ❌ It restates a Wikipedia detection rule without adding a positive fix
- ❌ The example is contrived (no real AI writes that way)
- ❌ The pull-quote can't be traced to a specific edition + page
- ❌ The rule conflicts with another rule and there's no `context_tags` resolution
- ❌ It's about taste rather than craft (e.g., "use the Oxford comma" — that's style preference, not AI-failure)

## Pull-quote licensing

Pull-quotes from cited books are short excerpts (10-25 words) used for educational commentary, which is fair use under U.S. copyright law. Don't include longer excerpts. Don't reproduce entire chapters or large structural elements. When in doubt, paraphrase and cite.

If a quote is approximate or paraphrased rather than exact, mark it `(paraphrased)` after the citation.

## Conflict resolution

When two rules disagree (e.g., Zinsser's Z-5 "be present on the page" wants first person, but H-1 "lead with bottom line" governs a memo where first person is wrong), the **`context_tags:`** field on each rule resolves the conflict. The rule applies only when the input's context tag is in its tag list.

Current tags: `all`, `memo`, `email`, `blog`, `book-draft`, `technical-doc`, `dictation`, `meeting-notes`. Propose new tags via PR if the existing set doesn't fit.

## Versioning

This project follows [semver](https://semver.org/):

- **Major bump (e.g., 3.x.x → 4.0.0)** — breaking architecture change. Don't introduce these without an issue and discussion.
- **Minor bump (e.g., 3.0.x → 3.1.0)** — new book added, or a structurally significant new feature (e.g., a new context tag).
- **Patch bump (e.g., 3.0.0 → 3.0.1)** — new rule in an existing book, refinement of an existing rule, doc fixes.

Update both `SKILL.md` (frontmatter `version:` field) and `CHANGELOG.md` in the same PR.

## Issue templates

When opening an issue, use one of:

- **`new-rule`** — propose a new rule
- **`new-book`** — propose a new book

Templates live at `.github/ISSUE_TEMPLATE/`.

## Code of conduct

Be specific. Cite sources. Don't argue from taste — argue from text. The discussion should be about whether the rule actually catches a real AI-failure mode and whether the fix actually helps.

If you disagree with an existing rule, open an issue with the specific text it mishandles. Concrete disagreements move the project forward.
Loading