<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://nick2bad4u.github.io/eslint-plugin-repo/blog/</id>
    <title>eslint-plugin-repo Blog</title>
    <updated>2026-04-24T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/"/>
    <subtitle>Updates, architecture notes, and practical guidance for eslint-plugin-repo users.</subtitle>
    <icon>https://nick2bad4u.github.io/eslint-plugin-repo/img/favicon.ico</icon>
    <rights>© 2026 Nick2bad4u</rights>
    <entry>
        <title type="html"><![CDATA[Designing Safe Autofixes for eslint-plugin-repo]]></title>
        <id>https://nick2bad4u.github.io/eslint-plugin-repo/blog/designing-safe-autofixes-for-eslint-plugin-repo/</id>
        <link href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/designing-safe-autofixes-for-eslint-plugin-repo/"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Autofix quality is a trust problem. A single unsafe fixer can make users disable an otherwise valuable rule.]]></summary>
        <content type="html"><![CDATA[<p>Autofix quality is a trust problem. A single unsafe fixer can make users disable an otherwise valuable rule.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Safety-first-autofix-principles">Safety-first autofix principles<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/designing-safe-autofixes-for-eslint-plugin-repo/#Safety-first-autofix-principles" class="hash-link" aria-label="Direct link to Safety-first autofix principles" title="Direct link to Safety-first autofix principles" translate="no">​</a></h2>
<ul>
<li class="">Prefer small, deterministic edits.</li>
<li class="">Avoid fixers when intent cannot be inferred with high confidence.</li>
<li class="">Use <code>suggest</code> when multiple valid fixes exist.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Practical-safeguards">Practical safeguards<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/designing-safe-autofixes-for-eslint-plugin-repo/#Practical-safeguards" class="hash-link" aria-label="Direct link to Practical safeguards" title="Direct link to Practical safeguards" translate="no">​</a></h2>
<ul>
<li class="">Keep fixer ranges narrow and syntax-aware.</li>
<li class="">Preserve comments and formatting boundaries.</li>
<li class="">Test fixer output for parse validity and idempotence.</li>
</ul>
<p>Safe autofixes improve adoption; risky autofixes undermine it.</p>]]></content>
        <author>
            <name>Nick2bad4u</name>
            <uri>https://github.com/Nick2bad4u</uri>
        </author>
        <category label="autofix" term="autofix"/>
        <category label="eslint" term="eslint"/>
        <category label="rule-authoring" term="rule-authoring"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Keeping Rule Docs and Presets in Sync]]></title>
        <id>https://nick2bad4u.github.io/eslint-plugin-repo/blog/keeping-rule-docs-and-presets-in-sync/</id>
        <link href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/keeping-rule-docs-and-presets-in-sync/"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Rule docs and presets can drift if sync workflows are treated as optional.]]></summary>
        <content type="html"><![CDATA[<p>Rule docs and presets can drift if sync workflows are treated as optional.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Working-model">Working model<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/keeping-rule-docs-and-presets-in-sync/#Working-model" class="hash-link" aria-label="Direct link to Working model" title="Direct link to Working model" translate="no">​</a></h2>
<ul>
<li class="">Hand-author rule explanations and examples.</li>
<li class="">Generate derived indexes/tables with repository scripts.</li>
<li class="">Validate links and route stability in CI.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Why-this-matters">Why this matters<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/keeping-rule-docs-and-presets-in-sync/#Why-this-matters" class="hash-link" aria-label="Direct link to Why this matters" title="Direct link to Why this matters" translate="no">​</a></h2>
<p>A plugin can have technically correct rules and still be frustrating to adopt if documentation and preset behavior diverge. Sync automation reduces that risk, but maintainers still need to curate the narrative docs intentionally.</p>]]></content>
        <author>
            <name>Nick2bad4u</name>
            <uri>https://github.com/Nick2bad4u</uri>
        </author>
        <category label="documentation" term="documentation"/>
        <category label="presets" term="presets"/>
        <category label="automation" term="automation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Thinking Behind eslint-plugin-repo]]></title>
        <id>https://nick2bad4u.github.io/eslint-plugin-repo/blog/the-thinking-behind-eslint-plugin-repo/</id>
        <link href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/the-thinking-behind-eslint-plugin-repo/"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[eslint-plugin-repo exists to move repository governance checks closer to the developer feedback loop.]]></summary>
        <content type="html"><![CDATA[<p><code>eslint-plugin-repo</code> exists to move repository governance checks closer to the developer feedback loop.</p>
<p>Instead of relying only on CI failures after a PR opens, these rules surface policy drift during local linting.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Core-philosophy">Core philosophy<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/the-thinking-behind-eslint-plugin-repo/#Core-philosophy" class="hash-link" aria-label="Direct link to Core philosophy" title="Direct link to Core philosophy" translate="no">​</a></h2>
<ul>
<li class="">Keep rules explicit and narrowly scoped.</li>
<li class="">Prefer actionable diagnostics over vague policy errors.</li>
<li class="">Treat autofix as an assistive capability, not a silent rewrite mechanism.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Why-Docusaurus-is-part-of-the-architecture">Why Docusaurus is part of the architecture<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/the-thinking-behind-eslint-plugin-repo/#Why-Docusaurus-is-part-of-the-architecture" class="hash-link" aria-label="Direct link to Why Docusaurus is part of the architecture" title="Direct link to Why Docusaurus is part of the architecture" translate="no">​</a></h2>
<p>A rule plugin without durable docs quickly becomes difficult to adopt. The docs site is intentionally split:</p>
<ul>
<li class=""><strong>Rule docs</strong> for consumers.</li>
<li class=""><strong>Developer docs</strong> for maintainers.</li>
<li class=""><strong>Generated API docs</strong> for type and surface reference.</li>
</ul>
<p>That split keeps onboarding and long-term maintenance practical.</p>]]></content>
        <author>
            <name>Nick2bad4u</name>
            <uri>https://github.com/Nick2bad4u</uri>
        </author>
        <category label="architecture" term="architecture"/>
        <category label="linting" term="linting"/>
        <category label="governance" term="governance"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Type-Aware Linting Without Surprises]]></title>
        <id>https://nick2bad4u.github.io/eslint-plugin-repo/blog/type-aware-linting-without-surprises/</id>
        <link href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/type-aware-linting-without-surprises/"/>
        <updated>2026-04-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Type-aware rules are powerful, but they can be expensive or confusing when not designed carefully.]]></summary>
        <content type="html"><![CDATA[<p>Type-aware rules are powerful, but they can be expensive or confusing when not designed carefully.</p>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="Design-constraints">Design constraints<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/type-aware-linting-without-surprises/#Design-constraints" class="hash-link" aria-label="Direct link to Design constraints" title="Direct link to Design constraints" translate="no">​</a></h2>
<ul>
<li class="">Keep type-checker calls targeted.</li>
<li class="">Avoid repeated expensive lookups in hot paths.</li>
<li class="">Fail gracefully when parser services are unavailable.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_Iwt7" id="UX-contract">UX contract<a href="https://nick2bad4u.github.io/eslint-plugin-repo/blog/type-aware-linting-without-surprises/#UX-contract" class="hash-link" aria-label="Direct link to UX contract" title="Direct link to UX contract" translate="no">​</a></h2>
<p>If a rule requires type information, documentation should state it and explain setup expectations.</p>
<p>Maintainers should optimize for predictable behavior and reliable performance over clever but fragile analysis.</p>]]></content>
        <author>
            <name>Nick2bad4u</name>
            <uri>https://github.com/Nick2bad4u</uri>
        </author>
        <category label="typescript" term="typescript"/>
        <category label="typed-rules" term="typed-rules"/>
        <category label="performance" term="performance"/>
    </entry>
</feed>