@roughen/core
v0.3.0
Published
Deterministic, local prose linting with explained findings and safe fixes.
Readme
@roughen/core
Deterministic local prose linting. Zero runtime dependencies, model calls, telemetry, or network access. ESM and CommonJS exports include TypeScript declarations.
import { lint } from '@roughen/core';
const result = lint('The crew arrived.', { format: 'md', fix: true });
// result.fixed === 'The crew arrived.'Findings explain the mechanical issue and expose UTF-16 source ranges, line/column locations, confidence in the match, and fix safety. With fixes enabled, findings refer to the fixed text. Quotes, code, Markdown tables, links, JSX expressions, and language/emoji joiners are protected. Careful fixes require explicit opt-in; manual edits never auto-apply.
collectMarkdownLinkTargets(text, 'md') exposes raw inline and reference-definition targets with source ranges, using the same grammar as the prose parser. Reference definitions contribute their target once; this helper doesn't resolve reference usage or verify that destinations exist. Code and verbatim quotations follow the parser's exclusions. The research runner uses it to catch references lost during reconstruction, including relative paths and fragments.
register: 'marketing' measures list saturation against human marketing pages (a provisional threshold fit on the unrated marketing-001 fit split; see site-pass-001) and keeps every other baseline. voice.bannedCharacters and voice.bannedPatterns are absolute house rules: every occurrence in editable prose is an error, and judgeRevision rejects a revision that adds one.
Production thresholds remain unvalidated and score is null. Sentence metrics are descriptive and don't identify authorship; the pilot and expanded discovery corpus do not establish production calibration. Supports text, Markdown, HTML fragments, and conservative MDX; source-code literal extraction isn't supported yet. MIT.
