Files
bot-agents/.agents/memory/lint-config-shape.md
T
Danny Kim ccfb08f4d5 Document that package.json aliases may target only direct subfolders of src (#21)
Follow-up to #20, which was merged before this landed.

bot-agents has no `package.json` `imports` aliases (`src/` is flat and everything imports relatively), so no code changes. This records the new rule in the docs:

- `.agents/memory/imports-aliases-barrels.md`: aliases may target only a direct subfolder of `src/` (its `index.ts` or a `#x/*` pattern); nothing outside `src/`, not `src/` itself, not deeper folders; such code imports relatively.
- `.agents/memory/tests-layout-vitest.md`: `tests/` reach the public entry through a relative import, not a `#plugin` alias.
- `.agents/skills/migrate-deno-repo/SKILL.md` and `AGENTS.md`: same rule.

`vp check`, `vp test`, and `damem doctor` pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #21
Reviewed-by: bot <noreply@capsulizers.com>
Co-authored-by: Danny Kim <temeddix@gmail.com>
Co-committed-by: Danny Kim <temeddix@gmail.com>
2026-10-18 14:37:49 +00:00

2.8 KiB

description
description
vite.config.ts lint uses Oxlint categories at error with Deno size limits, names no rule itself, and spreads configs from the plugins and scripts/project-lint.ts

The lint config is short and category-driven (user decisions 2026-10-14/15): turn on whole categories, then list only what parity or a real need adds.

lint: {
  plugins: ["typescript", "unicorn", "oxc", "import"],
  jsPlugins: ["eslint-plugin-explicit-types", "./scripts/project-lint.ts"],
  categories: { correctness: "error", suspicious: "error", pedantic: "error", perf: "error" },
  rules: { ...explicitTypes.configs.concrete.rules, ...projectLint.configs.project.rules },
  ignorePatterns: ["src/generated/**"], // generated files only, see below
  options: { typeAware: true, typeCheck: true, maxWarnings: 0, reportUnusedDisableDirectives: "error" },
},
  • Categories: correctness, suspicious, pedantic, perf at error. style and restriction are never turned on wholesale; pick single rules from them in configs.project. Extra rules that categories bring are fine.
  • Size limits match Deno (2026-10-17, replaces the 2026-10-16 "default limits stay"): repos behave as they did on Deno. bot-agents ran deno lint with no config, so it had no size or complexity limit, and every Oxlint limit rule (complexity, max-lines, max-params, id-length, no-nested-ternary, max-lines-per-function, max-classes-per-file, max-depth, max-nested-callbacks, max-statements, import/max-dependencies, unicorn/max-nested-calls) is "off" in configs.project. No file is split for size. Do not add new opt-outs anywhere without asking the user.
  • vite.config.ts names no rule. Every rule id, built-in ones included, lives in configs.project of scripts/project-lint.ts (project-lint-plugin). vite.config.ts only spreads configs.
  • Published plugins are consumed through their configs: ESLint flat config uses plugin.configs.<name>; Oxlint lists the package in jsPlugins and spreads plugin.configs.<name>.rules, since Oxlint plugins carry no configs. Use the configs equivalent to what the repo enabled under Deno.
  • maxWarnings: 0 keeps Deno's "every diagnostic fails" behaviour.
  • ignorePatterns is only for generated files (compiled output, codegen). Hand-written code is never ignored.
  • No lint disable comments: lint-no-disable-comments.
  • Parity: lint-parity-never-shrinks. Naming: naming-id-match.
  • Don't add a second import sorter; the import-structure plugin's enforce-import-order is the only one, and Oxfmt's sortImports stays off.

perf came last: in the template it flagged nine .includes on constant arrays, fixed as ReadonlySet + .has() rather than by turning a rule off. That is the expected response to any new rule: change the code.