Skip to content

Check style and terminology

Topicary lints your topics against your own Vale style rules while you write. Matching text is underlined in the editor, grouped by rule in the **Style** panel, and summarized into the AI prompt so generated drafts come out pre-compliant.

Style linting is available on every plan, including Free. Only the project owner can edit the style pack or mute a rule; every other member sees the findings.

This is Vale-compatible, not embedded Vale. Six of Vale's rule types run in your browser. The four that need a part-of-speech tagger, a dictionary, or a numeric parser are listed as deferred instead of being silently dropped. See "Which Vale rule types run" below.

Set up a style pack

  1. Go to Settings ▸ Content & AI and find the Style pack (Vale-compatible) card.

  2. Select Enable style linting for this project.

  3. Paste the contents of your .vale.ini file into the .vale.ini field.

  4. Under Style files, click Add style file. Enter the path exactly as Vale sees it, for example MyStyle/Terms.yml, then paste that file's YAML into the box below the path.

  5. Repeat step 4 for every style file your config references.

  6. Click Save AI settings.

There is no file upload and no repository connection. You paste the same text Vale reads from disk.

Only the project owner can save these settings. Everyone else sees the whole section read-only: a banner reading "Only the project owner can change these settings. You can read the project style rules, glossary, and style pack here, but not edit them.", every field disabled, the Save AI settings button disabled, and the Add buttons hidden. Ask the owner to make the change.

From your .vale.ini, Topicary reads StylesPath (stripped when deriving rule names), MinAlertLevel (findings below it are filtered out; the default is suggestion), and each [format] section, including BasedOnStyles and per-rule overrides such as MyStyle.Terms = error or MyStyle.Terms = NO.

An empty .vale.ini is valid and means lenient mode: every style file you add is treated as active. It is the fastest way to try a single rule file before porting your whole config.

The pack is stored as raw text and compiled in your browser. Compiled rules never leave the browser, so a change takes effect as soon as the editor reloads the pack.

Review style findings in a topic

  1. Open a topic in the editor.

  2. Open the Style tab in the right sidebar. Its badge counts the errors and warnings in the current topic, so a topic with only suggestions carries no badge.

  3. Read the counts at the top of the panel, which break the findings down into errors, warnings, and suggestions.

  4. Findings are grouped by rule, listed under the rule's short name with its own error and warning counts. A rule that raised only suggestions shows its total instead. Click a group to collapse or expand it.

  5. Click a finding to jump to the matching text and open its suggestion card.

The check re-runs automatically half a second after you stop typing. Click Run style check to run it on demand.

What the panel shows

What it means

Passes style

The topic matches your pack. Nothing to fix.

No style pack configured

No pack is saved yet, the pack is disabled, or it holds no style files. Set one up in Settings ▸ Content & AI.

"This topic is too large to lint in the editor. Split it, or run the full check at publish time."

The topic is over the size limits in the table below. Split it into smaller topics.

"N rules could not be loaded"

Rules Topicary could not read, because the style file is broken. Expanded by default. Each line names the rule, its file, and what is wrong.

"N rules deferred to full Vale"

Well-formed rules whose type this engine does not run. Collapsed by default. Expand to see each one with its type.

"Muted rules (N)"

Rules muted for the whole project. Expand to unmute.

"N dismissed in this topic"

Findings you hid one at a time. Click Restore to bring them all back.

Findings whose Vale rule defines a link show a docs link next to the message, pointing at your own style guide.

Fix a finding

  1. Click an underlined phrase in the editor. Hovering only tints the underline; the card opens on click and stays pinned until you press Esc, click outside it, or choose an action.

  2. Read the card. It leads with the severity and rule name, then the rule's message, then a Rule docs link when the rule has one.

  3. Choose an action:

    • Replace with "…": applies the fix in one click. This button appears only for rules that produce a replacement, which are the substitution, consistency, and capitalization types.

    • Dismiss: hides the finding in this topic. Dismissal matches on the rule plus the exact text that was flagged, so every identical match of that rule in the topic goes with it.

    • Mute this rule in this project: stops the rule flagging anywhere in the project.

Two things can stop a quick fix, and the card says which one applied:

Situation

Message on the card

Suggest mode is on, so edits are tracked instead of applied

"Turn off suggest mode to apply style fixes."

The text moved or changed since the finding was raised

"The text changed — dismissing this suggestion."

With suggest mode on, the underlines stay on screen. They are advisory, so you can keep reading the findings and fix the text by hand. See Track changes and suggestions for how suggest mode works.

Read-only topics work differently. When a topic is read-only, because of its workflow stage or because you are viewing an old version, live linting stops: the underlines and any open card clear, and no new check runs while you type. The findings are still reachable. Open the Style tab and click Run style check, which lists them without offering fixes.

Mute a rule for the whole project

  1. In the Style panel, expand the rule's group, or open any of its findings in the editor.

  2. Click Mute this rule in this project.

Muting silences the rule in three places at once: the editor underlines, the Style panel, and the summary sent to the AI. Muted rules stay listed under Muted rules (N) at the bottom of the panel, so suppression is never invisible. Click Unmute to bring a rule back. A muted rule that your pack no longer defines is marked (not in the current pack).

Action

Scope

How to undo it

Dismiss

Every identical match of that rule, in this topic, in this browser

Restore, next to the "N dismissed in this topic" count

Mute this rule in this project

Every topic in the project, for every member

Unmute, under Muted rules (N)

Only the project owner can mute or unmute a rule. For everyone else the mute action is hidden rather than shown and disabled. If you need a rule muted, ask the owner.

Which Vale rule types run

Rule type (extends)

In the editor

existence

Runs

substitution

Runs

occurrence

Runs

repetition

Runs

consistency

Runs

capitalization

Runs

sequence

Deferred to the full Vale check

spelling

Deferred to the full Vale check

metric

Deferred to the full Vale check

conditional

Deferred to the full Vale check

The six supported types run the same regular-expression operations Vale runs, with the same ignorecase, level, message, and link semantics. The four deferred types need a part-of-speech tagger, a spelling dictionary, or a numeric parser, so Topicary refuses to half-run them. It keeps them in your config and lists them in the panel with the reason "runs in the full-Vale check (roadmap)".

A rule that fails to load is reported separately, as an error rather than a deferral. The Style panel lists those under N rules could not be loaded, expanded by default, with the rule name, the style file it came from, and the reason, for example invalid YAML, not a valid Vale rule document, unknown rule type "existance" — check the extends field, no extends field — every Vale rule needs one, or a missing required field such as existence rule has no tokens or substitution rule has no swap map. The section ends with "Fix these files in Settings, under Content and AI. They are not waiting on anything here."

Nothing in that list is waiting on a roadmap item. Vale has exactly ten rule types, so an extends value Topicary does not recognize is a typo in your file, not a type it has yet to support. Open the named file in Settings > Content & AI and correct it.

Three more behaviors worth knowing:

  • scope is honored coarsely. A scope beginning with heading, including a finer selector such as heading.h2, restricts the rule to every heading block. Every other scope value, sentence and raw included, runs the rule over all prose blocks. No rule is skipped for its scope, so a narrow selector matches more text here than it does in Vale.

  • Capitalization rules default to headings. A capitalization rule with no scope checks heading blocks only, which matches the usual Vale house style. Give it a scope that does not begin with heading to run it over all prose. The $title match uses a pragmatic list of small words rather than Vale's full title-casing library, so a few unusual titles can differ.

  • Code is never linted. Code blocks and inline code are stripped before matching, so a banned word inside a command stays untouched.

AI drafts follow your style pack

Your pack is summarized into the system prompt for every AI writing surface: Draft content with AI, Inline AI editing, the selection-toolbar actions, and the AI chat panel. Generated text starts compliant instead of being corrected afterwards. The summary carries preferred terms, words to avoid, "pick one" pairs, and heading capitalization, and it caps at 1,200 characters. Muted rules are excluded from it, because a rule the project does not enforce should not steer the model.

Glossary terms and freeform style rules on the same settings page are sent alongside the pack. They cover different ground: the glossary sets preferred forms, and the pack enforces them as you type.

Limits

Limit

Value

Style files per project

100

Total size of the style config

500,000 characters

Rules executed in the browser

200 (extra rules stay in the config but do not run)

Muted rules per project

500

Topic size before linting stops

2,000 blocks or 500,000 characters

Delay before a re-check

0.5 seconds after your last keystroke

Freeform style rules on the same page

20

Glossary terms on the same page

200

Saving a pack over the file or size limit fails with "Maximum 100 style files." or "Style config is too large." Nothing is written until the config fits.


See also

Was this page helpful?