Skip to content

Releases: Cadasto/docs-editing-plugin

v0.4.1

Choose a tag to compare

@sebastian-iancu sebastian-iancu released this 01 Oct 12:18

A docs-only release: the README follows the sibling go-coding layout without the Status column, each docs/ page names its reader, and statements that had drifted from the tree are corrected. No component changes.

Install with /plugin install docs-editing@cadasto.

Changed

  • Docs: README.md gains a badge row, a requirements paragraph, a table of contents and a Features list; Install and Component surface become Installation and Components, and the scope section folds into the intro and How it decides.
  • Docs: README.md links the validator's four plugin-specific invariants in docs/testing.md instead of restating them.
  • Docs: each docs/ page opens with a paragraph naming its reader and purpose.
  • Docs: docs/testing.md adds a /humanize smoke test and checks that /docs-lint-setup copies the ai-tells style.
  • Docs: docs/versioning.md adds a release step to update the README version badge.
  • Docs: README.md drops the Status column from Components and folds The rule that defines it into How it decides.
  • Docs: README.md adds Routing and Cursor parity features, a grounding-sources paragraph, and a Components row for references/vale.ini.
  • Docs: README.md states that both agents hold Bash but not Write or Edit.

Fixed

  • Docs: docs/install.md no longer lists go install as a Vale install route, and names one prose linter instead of two.
  • Docs: docs/testing.md says to load a working copy with --plugin-dir, not install it.
  • Docs: README.md limits the claims-rule feature to the skills that write or edit prose.
  • Docs: README.md credits the read-the-repo-first step to the router and Cursor rule, not to every skill.
  • Docs: docs/install.md names the Cursor-only rule among host differences and the _vale.ini alternative.
  • Docs: docs/testing.md says a missing agent tools: key is an error too.
  • Docs: docs/testing.md says CI runs scripts/validate.py directly, not scripts/validate.sh.
  • Docs: docs/authoring.md lists ai-tells.md among the references.
  • Docs: docs/install.md calls the prose-lint hook by name instead of "save hook".

v0.4.0

Choose a tag to compare

@sebastian-iancu sebastian-iancu released this 24 Sep 11:29

Adds /humanize and the ai-tells catalogue and Vale style, and makes the house style em-dash free: the assistant writes none, a human author's deliberate dash is kept, and the plugin's own prose now follows the rule.

Install with /plugin install docs-editing@cadasto.

Added

  • Skills: humanize removes AI tells from existing prose, with a --report-only mode that names patterns and never judges authorship.
  • References: references/ai-tells.md, the canonical catalogue of AI tells ranked by strength, with the house em-dash rule and the when-not-to-act list.
  • References: the ai-tells Vale style in references/vale-styles/ai-tells/: chatbot-residue, tool-markup (error), signposting, stock-vocabulary, vague-attribution (warning), negation-contrast, em-dash (suggestion). Tested against Vale 3.18.0 with positive and false-positive fixtures.
  • References: vocab-accept.txt accepts chatbot.

Changed

  • References: style-guide.md §3 forbids em dashes in assistant-written prose and keeps a human author's; §2 points to ai-tells.md.
  • References: vale.ini adds ai-tells to BasedOnStyles.
  • Skills: /docs-lint-setup copies the ai-tells style into styles/ai-tells/ and keeps it tracked in .gitignore.
  • Skills: docs-editing routes AI-tell requests to humanize and refuses authorship verdicts and detector evasion.
  • Skills: copy-editing names humanize in its anti-trigger.
  • References: the good examples in claims-and-evidence.md §3 and marketing-copy use a colon instead of an em dash.
  • Skills: copy-editing, technical-writing and marketing-copy apply the strong tells and the em-dash rule.
  • Agents: prose-reviewer reports AI tells in its style pass.
  • Hooks: session-start.sh announces /humanize and the em-dash rule.
  • Rules: docs-editing-context.mdc names /humanize and the em-dash rule.
  • Docs: em dashes removed from every skill, agent, reference, rule, doc, README.md, AGENTS.md and this changelog; lone — table cells in the router read none.
  • Manifests: description names AI-tell cleanup and uses a colon instead of an em dash.

v0.3.0

Choose a tag to compare

@sebastian-iancu sebastian-iancu released this 25 Aug 19:17

Makes the shipped Vale setup usable out of the box, and corrects three claims this repo's own docs made about tooling it had not actually run.

Install with /plugin install docs-editing@cadasto.

The linter now works on first run

A seeded vocabulary. /docs-lint-setup used to touch an empty accept.txt, so Vale.Spelling ran against a general dictionary with no project terms and reported ordinary jargon — repo, config, frontmatter, validator, stderr — as misspellings, burying every real style finding underneath. On this plugin's own tree that was 190 spelling alerts. The new references/vocab-accept.txt ships as the seed and leaves 11, all product names and cited proper nouns, which is the category a repo appends for itself.

Entries are case-tolerant regexes ([Cc]onfigs?). Vale.Terms requires a term to appear exactly as listed, so a bare lowercase entry silences the spelling warning and then reports every sentence-initial capital instead — one class of false positive traded for another. A product name still goes in with its exact capitalisation, where that rule enforcing it is the point.

The seed carries no British/American spelling pairs, because Vale's dictionary already accepts both: behaviour, organisation, initialise, licence, and catalogue all pass unaided.

Google.Quotes is off. It enforces American punctuation-inside-quotes while the house style is British, which places the comma or period outside unless it belongs to the quote — so the rule fired on correct prose. Seven error-level false positives on this repo's docs, now zero.

The vocabulary is no longer named after an organisation. Vocab = Cadasto became Vocab = Project, a neutral default a repo can rename; scaffolding no longer creates a Cadasto/ directory in someone else's tree. /docs-lint-setup takes the name as a VOCAB variable used for both the directory and the config value, so the two cannot drift apart.

Corrected claims

Each of these was stated in the docs without the tool having been run. All three are now verified against Vale 3.18.0 and cite that version.

  • vale does not warn about an unknown rule name. The docs said it "warns but exits 0". The exit-0 half was right; it produces no output at all — empty stderr — which is exactly what makes a renamed upstream rule dangerous. An unknown style package is the loud case: E100 [loadStyles], exit 2. So a broken Packages = line is caught for you and a broken rule line is not.
  • vale sync does not warn about a missing vocabulary directory. It reports success and exits 0. The lint then fails hard with E100 [vocab] … vocabulary not found and exit 2, so the config reads as healthy until someone lints.
  • The validator enforces four invariants, not two. README.md claimed two and named two — reference resolution, markdown links, tool grants, and doc sync — while docs/testing.md already said four.

Documentation

Sentence-case headings, answer-first openings, and the rules the reference config escalates to error cleared from this repo's own prose. AGENTS.md no longer pins a version: it read v0.1.1, stale by two releases and a version never released at all. CHANGELOG.md and the git tags own that fact.

Full changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@sebastian-iancu sebastian-iancu released this 25 Aug 15:58

Tightens the plugin to a single prose linter and makes its always-on surface cheap.

Install with /plugin install docs-editing@cadasto — the catalog entry is pinned to this tag.

Removed

The markdownlint integration, entirely. Deleted references/markdownlint.jsonc and removed the tool from docs-lint-setup (now Vale-only), copy-editing, technical-writing, the docs-editing router, prose-reviewer, the Cursor rule, and both hooks. It required a Node toolchain that could not be verified, and prescribing a tool the assistant cannot run contradicts this plugin's own advice-equals-tooling principle. Vale is now the only linter shipped.

Markdown structure rules therefore have no enforcer. style-guide.md §6 no longer claims otherwise — those rules are conventions applied by judgment, and a consuming repo's own structural linter takes precedence.

Changed

Every skill description rewritten for the skill-listing budget. Claude Code caps the always-on skill listing at contextWindow × 4 × skillListingBudgetFraction characters. Over budget it does not shorten descriptions — it drops them whole, so a skill degrades to a bare name with nothing to trigger on. Selection is greedy by usage priority (usageCount × 0.5^(days/7)), which is exactly 0 for a never-used skill, so a new plugin's skills compete last and length is the only lever they control.

Trigger phrases and sibling disambiguation were kept; the lead-in restating the skill name and the mechanism prose were dropped. Total description weight falls from 3,635 to 1,861 characters — measured over an identical 84-skill listing, 35,560 → 33,786, taking the plugin from 10.8% of the listing for 8.3% of the skills to 6.1%.

Hooks. prose-lint-on-save.sh is Vale-only and opt-in on .vale.ini alone; session-start.sh no longer treats a markdownlint config as a docs-workspace signal.

Docs. docs/install.md records Vale's exit codes (0 clean, 1 findings, 2 config error) and that the release binary is the working install route — go install fails to build against tree-sitter.

Fixed

The agents were described as read-only while holding Bash. prose-reviewer and seo-auditor are now report-only: no Write/Edit in the tool grant, with no-edit stated as a contract the body keeps rather than a sandbox that enforces it. The v0.1.0 notes and README carried the inaccurate wording.

marketing-copy prescribed vale without declaring Bash, so its own pre-handover self-check could not run without a permission prompt its sibling skills avoid.

The documented local-install command did not exist. claude plugin add is not a subcommand — and because claude plugin <unknown> prints general help and exits 0, the wrong command never failed visibly. Replaced with claude --plugin-dir <path> (session-scoped) across README.md, docs/install.md, docs/versioning.md, and AGENTS.md.

Added

Tool-grant invariants in scripts/validate.py. A component whose body prescribes a shell command must declare Bash; an agent must not declare Write/Edit, nor call itself "read-only" while holding a write-capable tool. Both are negative-tested against the defects above — the advice/capability mismatches that shipped in 0.1.0 now fail CI.

Full changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@sebastian-iancu sebastian-iancu released this 25 Aug 09:07

First build of the Docs Editing Plugin — documentation, editing, and content standards for AI coding assistants, targeting both Claude Code and Cursor from a single shared component set. Pure Markdown + JSON: no build step, no MCP server.

The rule that defines it

A claim that cannot be traced to a source does not ship.

Generative copy tooling fails in one predictable way: asked to make a page more persuasive, it invents the persuasion — statistics, customer counts, testimonials, awards, urgency. Every component here substitutes the observable mechanism instead, and treats hedging ("up to", "designed to", "teams report") as still a violation rather than a repair.

Scope

Prose written for people — documentation, guides, references, page and marketing copy, changelogs, release notes, site metadata, llms.txt.

Agent-instruction files (AGENTS.md, CLAUDE.md, .cursorrules, rule and skill definitions) are read for a repository's conventions and never authored or rewritten. That genre addresses a model rather than a reader, which inverts several rules here — repetition becomes deliberate, hard constraints must stay hard.

Components

Skills (7) — docs-editing (always-on router) plus /technical-writing, /copy-editing, /marketing-copy, /seo-audit, /ai-seo, /docs-lint-setup.

Agents (2, read-only) — prose-reviewer for what linters cannot see (unsourced claims, doc-kind bleed, stale inventories); seo-auditor for a discoverability sweep with a mandatory coverage statement.

References (4 + 2 configs) — the canonical rules every component cites: claims and evidence, house style, document kinds (Diátaxis), SEO checklist; plus reference vale.ini and markdownlint.jsonc.

Hooks (2, dual-host) — a session-start context line, and a prose-lint-on-save reporter that is advisory and never rewrites the file, and stays silent unless the repo carries its own linter config.

Cursor rule — docs-editing-context.mdc.

Install

Claude Code:

/plugin marketplace add Cadasto/plugin-marketplace
/plugin install docs-editing@cadasto

Cursor: add this repository as a plugin (Settings → Plugins). See docs/install.md.

Prerequisites: none. Installing Vale and markdownlint-cli2 and running /docs-lint-setup makes the mechanical half of the house style machine-enforced.

Validation

scripts/validate.py is stdlib-only and enforces manifest parity, frontmatter (including the YAML trap that silently drops all metadata, and the allowed-tools: foot-gun that would leave an agent inheriting every tool), plus three project invariants: reference citations resolve, every relative Markdown link and #anchor resolves, and every skill and agent is wired into both the router and the session-start surface.

Known limitation: references/vale.ini names rules from upstream style packages, and vale warns but exits 0 on an unknown rule name — so an upstream rename silently stops that rule applying. This is not yet checked automatically; see docs/versioning.md.