Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
302eaca
docs(plans): record the scope boundary for the readability reader-req…
mxriverlynn Aug 19, 2026
e80cc11
docs(plans): record discovery notes and the confirmed scope boundary …
mxriverlynn Aug 19, 2026
faea095
docs(plans): draft the feature specification and decision log
mxriverlynn Aug 19, 2026
7aa7b2a
docs(plans): record the feature size and the dispatched review team
mxriverlynn Aug 19, 2026
f624684
docs(plans): record and resolve the review team's findings
mxriverlynn Aug 19, 2026
bbdc1c0
docs(plans): revise the spec and decision log against the review find…
mxriverlynn Aug 19, 2026
bf919fa
docs(plans): record the escalation answers and complete the findings …
mxriverlynn Aug 19, 2026
0cfb437
docs(plans): correct the finding reference on the unverified-input note
mxriverlynn Aug 19, 2026
35647f9
docs(plans): apply plan synthesis across the spec and artifacts
mxriverlynn Aug 19, 2026
b4cd983
docs(plans): apply the readability rewrite and clear the completeness…
mxriverlynn Aug 19, 2026
53c10e7
docs(plans): append implementation discovery notes
mxriverlynn Aug 19, 2026
99af274
docs(plans): add the implementation plan, decision log, and round record
mxriverlynn Aug 19, 2026
8692479
docs(plans): correct the fidelity-class count across the planning art…
mxriverlynn Aug 19, 2026
6f790da
docs(plans): build the correction inventory in the plan rather than f…
mxriverlynn Aug 19, 2026
fc44cc6
docs(plans): apply the readability rewrite and reconcile the count wi…
mxriverlynn Aug 19, 2026
cdb751e
feat(han-communication): honor the shape the reader asked for
mxriverlynn Aug 19, 2026
4eb9e6d
docs(plans): record the correction inventory and the patterns that bu…
mxriverlynn Aug 19, 2026
5be1b24
fix(han-documentation): restore the generation-time sentence in proje…
mxriverlynn Aug 19, 2026
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
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ test, add it to that list and wire the standard in:
skill's real reader is a specific expert (an engineer, a pull-request reviewer, a non-technical stakeholder), name
that reader instead of defaulting. Scope the frame per section so technical specifics the reader needs are not
simplified away.
4. **Add the standardized self-check.** Before presenting, the skill runs six behaviorally-anchored yes/no criteria over
4. **Add the standardized self-check.** Before presenting, the skill runs behaviorally-anchored yes/no criteria over
the prose regions only: main point first, descriptive headings, one idea per paragraph, sentence length, common
words with no blocklisted word and an explanation for every term the reader cannot look up, every fact preserved. It
corrects any failure. Leave code fences, diagram bodies, rendered markup, and citation identifiers unevaluated and
Expand Down
6 changes: 3 additions & 3 deletions docs/concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,10 +188,10 @@ writes. That rule makes the deliverable lead with its main point, give each para
headings, keep sentences short and active, prefer common words, and reveal detail in layers.

The rule is applied in stages, never as one instruction block. Its structural rules shape each skill's output template,
and its six behaviorally-anchored criteria run as a discrete self-check after the draft exists. Skills with a synthesis
or editor step also dispatch the [`readability-editor`](../han-communication/docs/agents/readability-editor.md) agent to
and its behaviorally-anchored criteria run as a discrete self-check after the draft exists. Skills with a synthesis or
editor step also dispatch the [`readability-editor`](../han-communication/docs/agents/readability-editor.md) agent to
rewrite the draft, preserving every fact. Fidelity outranks readability: no required fact is dropped to read more
simply.
simply, unless the reader asked for less and losing it would not change what they do next.

Readability applies to the reader-facing skills (`/research`, `/gap-analysis`, `/project-documentation`,
`/issue-triage`, `/runbook`, `/architectural-decision-record`, `/code-overview`, `/investigate`, `/code-review`,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
# Discovery notes

Gathered 2026-08-19, before the interview. Paths are repo-relative.

## The two files the issue names

- `han-communication/references/readability-rule.md` (153 lines). Carries the audience frame, nine output
properties, length guidance, the prose-only scope, `## Fidelity wins` (lines 97-102), the scoped escape
clause (104-113), and `## The standardized self-check` (115-132). Line 130 reads "The set is enumerated,
not illustrative: these six criteria are the whole check."
- `han-communication/output-styles/han-readability.md` (97 lines). A distilled copy. Its own
`## Fidelity wins` (71-75) and its own six-criterion check (85-97). The closure sentence "These six criteria
are the whole check" opens that block at line 87 rather than closing it.

## The count is echoed on 25 more surfaces

> **Superseded.** The counts in this section are what the pre-interview sweep found. The corrected inventory
> is the touch-points table under "Implementation discovery" below, re-verified with wrap-tolerant searches at
> synthesis on 2026-08-19. This section is kept because the specification cites it.

The phrase "six-point self-check", "six-point checklist", or "six criteria" appears in **21 SKILL.md files**:

```
han-coding/skills/architectural-analysis han-planning/skills/iterative-plan-review
han-coding/skills/automated-test-planning han-planning/skills/plan-a-feature
han-coding/skills/code-overview han-planning/skills/plan-a-phased-build
han-coding/skills/coding-standard han-planning/skills/plan-implementation
han-coding/skills/design-an-api han-planning/skills/plan-work-items
han-coding/skills/investigate han-reporting/skills/html-summary
han-coding/skills/manual-test-planning han-reporting/skills/stakeholder-summary
han-documentation/skills/architectural-decision-record han-research/skills/gap-analysis
han-documentation/skills/project-documentation han-research/skills/issue-triage
han-documentation/skills/runbook han-research/skills/research
han-github/skills/update-pr-description
```

Several of those also name "criterion 6" as the fidelity guard by number, which the seventh criterion
does not move but which is the same class of hardcoded reference.

And in **3 operator-facing docs**: `docs/readability.md:105`,
`han-communication/docs/output-styles/han-readability.md:72`,
`han-communication/docs/agents/readability-editor.md:21,72`. The third one describes the editor's own rubric,
which this change leaves alone, so only the first two are in the sweep (see F6).

The canonical `han-communication/references/explanation-rule.md:17` also names the size, reading "a six-item
self-check over a whole document". It sat outside this inventory and was added during review (F6).

`han-communication/skills/readability-guidance/SKILL.md` is already count-free. It says "the standardized
self-check" and "the fidelity criterion", never a number. It is the model for what the other 21 could be.

## The editor agent runs a different six

`han-communication/agents/readability-editor.md:95` says "Audit and rewrite against these six criteria.
They are the whole rubric." Its set is **not** the rule's set:

| # | Rule's self-check | Editor's rubric |
| - | ----------------- | --------------- |
| 1 | Main point first | Main point first |
| 2 | Descriptive headings | Descriptive headings |
| 3 | One idea per paragraph | One idea per paragraph |
| 4 | Sentence length | Short, active sentences |
| 5 | Common words, no blocklisted word | Common words, no blocklisted words |
| 6 | Every fact preserved | Progressive disclosure |

The editor carries fact preservation as an absolute principle above the rubric (lines 35-39) plus a
fact-preservation ledger in its report, rather than as a rubric row.

The editor also never receives a reader's shape request. Every dispatching skill passes it a file path
and a named audience, and nothing else. `han-planning/skills/plan-a-feature/SKILL.md:432` is
representative: "Pass the editor the file path ... and the named audience".

## A prior decision already rejected a seventh criterion

`docs/plans/orwell-six-rules/artifacts/implementation-decision-log.md:78-85` records decision D-4. It
added two new principles to the editor agent beside the fidelity principle rather than as a seventh
rubric criterion, and names the rejected alternative in its own words:

> Add a seventh rubric criterion, rejected because it breaks the keep-it-small design (research O1) and
> falsifies the "six criteria" count on the seven-plus surfaces that echo it (C6, F10).

That plan measured "seven-plus surfaces". The grep above finds 25 outside the two canonical files. The
prior decision is evidence about the cost, not a veto: issue #177 reopens it deliberately.

## The rule forbids subjective criteria

`readability-rule.md:117-118`: the self-check "evaluates concrete, behaviorally-anchored yes/no criteria,
never 'is this clear?'" This bears directly on the issue's third proposal, a simplicity test beside the
sentence-length ceiling.

## The keep-it-small design principle is stated, not incidental

`readability-rule.md:130-131`: the set "is kept small on purpose so it applies as one focused pass rather
than decaying under its own weight." Line 70-72 states the same principle for the output properties.

---

# Implementation discovery

Gathered 2026-08-19 by `plan-implementation`, appended rather than overwriting: the specification cites the
inventory above, so replacing this file would break that reference.

## Tech stack and tooling

Markdown and Bash only. No application build, no dev server. The root `package.json` carries dev tooling.

- **Lint:** `npm run lint` runs `prek run --all-files` — Prettier, ShellCheck, and file-hygiene hooks.
- **Test:** `npm test` runs Bats over every `*.bats` file outside `node_modules`.
- **Prettier settings:** `printWidth: 120`, `proseWrap: preserve`, `embeddedLanguageFormatting: off`. Prose
wrapping is preserved, so hand-wrapped paragraphs stay as written and reflowing is the author's job. **This is
why every inventory search here joins lines before matching**: a sentence routinely spans two lines, and a
line-oriented search silently misses it (D-10).

## No automated test covers what this change edits

Seven Bats files exist and every one covers a shell script:

```
test/sanity.bats (harness proof only)
scripts/han-config-dir.bats
.claude/skills/han-release/scripts/remote-tag-state.bats
han-coding/skills/code-review/scripts/detect-review-context.bats
han-coding/skills/automated-test-planning/scripts/detect-test-context.bats
han-planning/skills/iterative-plan-review/scripts/check-cross-references.bats
han-planning/skills/plan-a-feature/scripts/verify-design-images.bats
```

Nothing asserts anything about the readability rule's text, the output style's text, or the skill files that
quote them. The only automated guard on this change is Prettier formatting. **Verifying that a 28-file sweep
landed completely is therefore an open implementation question, not a solved one.**

## Touch points

**The two canonical files, four passages each.**

- `han-communication/references/readability-rule.md` (153 lines): `## Fidelity wins` (97-102), the escape
clause (104-113, whose closing sentence names criterion 5 positionally at line 112), `## The standardized
self-check` (115-132, whose closing paragraph declares the set closed at 130 and names criterion 6
positionally at 132).
- `han-communication/output-styles/han-readability.md` (97 lines): the fidelity sentence at line 11,
`## Fidelity wins` (71-75), the escape clause (77-83, whose limit is worded differently from the rule's:
"It never licenses a blocked word and never licenses a lost fact"), and the check (85-97, declaring the set
closed at 87).

**The quoting surfaces, verified by repository-wide search.**

**Re-verified at synthesis on 2026-08-19 with wrap-tolerant searches.** The table below is the corrected
inventory; where round 1's figure differed, the row says so.

| Class | Count | Where |
| ----- | ----- | ----- |
| Size reference to the standard's self-check | 21 `SKILL.md` files, 25 occurrences | Six plugins; full list in the inventory above. Four files carry two occurrences each |
| Size reference outside the skill directories | 5 files, 6 occurrences | `docs/readability.md:89` and `:105`, `docs/concepts.md:191`, `CONTRIBUTING.md:258`, `han-communication/docs/output-styles/han-readability.md:72`, `han-communication/references/explanation-rule.md:17`. **Corrected at synthesis:** round 1 recorded 3 files. The first three above were missed because the search matched only the hyphenated forms of the phrase. See D-11 |
| Fidelity restatement naming **the standard** (changes) | 25 occurrences across 23 files | 20 self-check restatements in 20 `SKILL.md` files; 3 audience-frame paragraphs that still say "the standard governs" (`code-review`, `code-overview:59`, `stakeholder-summary`); `han-coding/skills/code-review/references/output-verification.md:97`; `docs/readability.md:155`. **Corrected at synthesis:** round 1 recorded 18. See D-4 |
| Fidelity restatement naming **the frame** (unchanged) | 9 occurrences across 9 `SKILL.md` files | `coding-standard`, `automated-test-planning`, `readability-guidance`, `architectural-decision-record`, `iterative-plan-review`, `plan-a-feature`, `plan-a-phased-build`, `plan-implementation`, `plan-work-items`, plus the canonical sentence in `readability-rule.md`. **Corrected at synthesis:** round 1 recorded 8. See D-4 |
| Positional reference to criterion 6 | 6 `SKILL.md` files + `readability-rule.md:132` | architectural-decision-record, runbook, issue-triage, html-summary, plan-work-items, iterative-plan-review |
| Positional reference to criterion 5 (unchanged) | 1 `SKILL.md` file + `readability-rule.md:112` | `han-coding/skills/code-overview/SKILL.md:397`. Criterion 5 keeps its position and its meaning, so nothing about it became untrue. See D-12 |
| Hardcoded enumeration of the whole check | 1 file | `han-coding/skills/code-review/references/output-verification.md:87-95` lists criteria 1 through 6 in its own words. **Found at synthesis;** absent from round 1's inventory. See D-13 |

Totals: **63 corrections across 28 quoting files**, plus 8 passages in the 2 canonical files. Of the 21 skill
files carrying a size reference, 20 also need the self-check fidelity fix and 1 (`plan-a-feature`) needs the
size fix alone.

**The fidelity class splits by grammatical subject, and only one side changes.** Twenty-five sites name *the
standard* as what never drops a fact, and those change, because a reader's stated request can now drop one.
Nine sites name *the frame*, and those stay: the frame still never decides whether a fact appears. Round 1
recorded the split against the block a sentence sits in, which misroutes four sentences that sit in
audience-frame paragraphs and still name the standard. `readability-guidance` and `plan-a-feature` carry only
the frame form and take no fidelity edit at all. Recorded as D-4, corrected at synthesis.

**Left alone deliberately.** Three files describe the readability editor's own rubric, which this change does
not touch, so every statement in them stays true: `han-communication/agents/readability-editor.md` (criterion
5 named positionally at lines 26, 27, 44, 142, and the rubric's size at 95),
`han-communication/docs/agents/readability-editor.md` (three size references), and
`han-communication/skills/edit-for-readability/SKILL.md` ("Do not restate the six rubric criteria here").
**The third was added at synthesis.** A completeness search must also tolerate matches that have nothing to do
with the readability check at all: `coding-standard`'s six adoption-bias checks, `edge-case-explorer`'s six
dimensions, `gap-analyzer`'s six steps, and the "Six places" sentence in every vendored copy of
`collaborative-stop-rule.md`. See D-1.

## Precedent for this exact shape of change

`docs/plans/orwell-six-rules/` planned the closest prior change: edits to the same standard and the same editor
agent, with the same worry about count claims going stale. Two things it decided are worth carrying:

- Its D-4 rejected a seventh rubric criterion **because** it would falsify the count on the surfaces that echo
it. This plan does the opposite, having removed that cost by going count-free instead.
- Its D-7 ran a scoped documentation-consistency check limited to statements the edits made false, using the
repository's own `han-update-documentation` skill on the branch. That skill exists, scopes itself to what the
branch touched, and is a candidate verification step here.

## Recent churn

The readability area is among the most-edited in the plugin over 90 days:
`readability-guidance/SKILL.md` 12 commits, `edit-for-readability/SKILL.md` 10,
`docs/agents/readability-editor.md` 7, `agents/readability-editor.md` 6,
`references/readability-rule.md` 5, `references/writing-voice.md` 4. Edits here meet actively-moving text.

## Gaps found

- **No coding standards document** for prose or reference files beyond `CLAUDE.md`'s Conventions section and
the `han-plugin-builder` authoring guidance.
- **One ADR only:** `docs/adr/0001-project-configurable-default-swarm-size.md`. Nothing records the readability
standard's keep-it-small design closure as an architectural decision, even though this change reopens it.
- **No test coverage** for the edited text, as recorded above.
- **No versioning decision recorded.** The change touches seven plugins' shipped files. **Corrected in round 1:**
this section first said nine; the verified inventory lands in `han-coding`, `han-planning`, `han-documentation`,
`han-research`, `han-reporting`, `han-github`, and `han-communication`, and `docs/readability.md` is repo-root
rather than a plugin. Settled as D-6: no version moves on this branch.
Loading