#24: make runner/sensor/registry smell-agnostic (config-driven) - #39
Merged
Conversation
Derive the eslint raw->smell map, eslint/jscpd/comment produces from the catalogue, hold knip's raw issue types and the supplemental parse-error as config literals, and move the ruff + deptry AdapterSpecs here. A test pins the catalogue derivation. Unused until the sensor layer imports it. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Nq6xHU6JtSNpYWhMYjXB15
hardcoding it. The acceptance grep for non-essential-comment / duplicated-code / unused-dependency / parse-error is now clean for non-test source; adding an eslint smell touches only config + init. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Nq6xHU6JtSNpYWhMYjXB15
devill
force-pushed
the
issue-24-smell-agnostic
branch
from
June 17, 2026 15:26
067a3ed to
bff09dc
Compare
devill
marked this pull request as ready for review
June 17, 2026 15:27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #24.
Concrete smell knowledge was hardcoded across the runner, sensors, checks, and rules registry. Per the locked decision it should live only in config (+ language initializers). This moves it all to a single config home.
Design
New
src/config/tool-smells.tsis the single source:defaultRules): the eslint raw→smell map, and eslint/jscpd/commentproduces. So adding a catalogue smell auto-wires its translation and produces.parse-error(an eslint fatal with no catalogue rule).AdapterSpecs moved here too.The runner, sensors (preset/python-preset/deptry-sensor), checks (eslint/knip/jscpd/comment), and rules registry now import these instead of hardcoding.
Acceptance
grep -rn "non-essential-comment\|duplicated-code\|unused-dependency\|parse-error" src/runner.ts src/sensors/ src/checks/ src/rules/is clean for non-test source (test files retain concrete smells as behaviour assertions).src/config/+src/cli/init/— a derivation test pins this, and Add deep-nesting smell (TypeScript via ESLint max-depth) — also #24's live demonstrator #26 (deep-nesting) is the live demonstrator (stacked on this branch).Note
Realizes the locked "spec from config" via config-derived constants imported by the sensor layer (rather than per-call DI) — smell knowledge lives solely in config, consumed downward; lower-risk and behaviour-preserving. Documented in
DECISIONS.md.Atomic commits
#24: add config/tool-smells as the single home for smell knowledge#24: make the runner/sensor/check/registry layer smell-agnostic🤖 Generated with Claude Code
Generated by Claude Code