Skip to content

Decide whether a whole-project Vale check should skip build output and vendored trees #101

Description

@thecodedrift

Scope narrowed. This issue originally bundled two problems. The .taskless/ half is fixed in #100 (63719f3) — Taskless linting its own config and the user's rule definitions is wrong under every reading, so it did not belong behind an open question. What remains is the part that genuinely is a judgement call.

The scaffolded .vale.ini opens an unscoped [*] section. That was harmless while Vale never ran; #100 makes a whole-project check reach it for the first time.

Measured

Scaffolded config, one rule enabled under [*], vale ... -- .:

Path Linted Status
doc.md yes intended
dist/notes.md yes this issue
.taskless/vale/.vale.ini yes fixed in #100
.taskless/vale/rules/no-simply.yml yes fixed in #100
node_modules/somepkg/README.md no Vale skips it already

So node_modules needs nothing. What is left is build output and any vendored tree that is not node_modulesdist/, build/, vendor/, target/, generated docs.

Why this half is not obvious

Unlike .taskless/, there is no reading under which the answer is forced:

  • A repo that commits generated documentation may want it linted. Prose is prose regardless of who wrote it.
  • The set of build directories is language- and tool-specific, so any built-in list is a guess that is wrong somewhere.
  • Vale already respects the user's section globs, so a user who scopes [*.md] has expressed an intent we would be second-guessing by adding exclusions on top.

Options

  1. Scope the scaffold instead of excluding. Ship [*.md] rather than [*], so the default is prose files and widening is the user's explicit act. Matches how the engine is defined in taskless help engine-selection, and matches what every fixture and test in the repo actually writes. Does not address a dist/ full of .md.
  2. Respect .gitignore. Most build output is already ignored, so this needs no per-language list and follows intent the user already expressed. Vale has no .gitignore awareness, so the CLI would have to resolve the ignore set and translate it into --glob arguments — real work, and the translation is lossy.
  3. A small built-in exclude list. Cheap, immediately useful, wrong for somebody. Would want to be overridable.
  4. Nothing. Defensible: the user controls scope through their config, and a wide [*] producing wide results is arguably correct behavior rather than a bug.

Not urgent

The scaffold enables no rules, so nothing happens until a user adds one. Every fixture and test in the repo scopes its own section, which is also why the wide default went unnoticed for so long.

Refs #100

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions