Help us improve
Share bugs, ideas, or general feedback.
From project-toolkit
Aligns local configs to upstream validators like ESLint, markdownlint, PSScriptAnalyzer for unexpected failures, avoiding tool modifications or forks.
npx claudepluginhub rjmurillo/ai-agents --plugin project-toolkitHow this skill is triggered — by the user, by Claude, or both
Slash command
/project-toolkit:validation-authorityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When integrating external validators (PSScriptAnalyzer, markdownlint, ESLint, etc.), respect upstream defaults. Modify local configuration to match upstream behavior. Do not modify upstream tool code.
Aligns local configs to upstream validators like ESLint, markdownlint, PSScriptAnalyzer for unexpected failures, avoiding tool modifications or forks.
Determines provenance (UPSTREAM, LOCAL, VENDOR, UNKNOWN) of validators, linters, and tool configs by analyzing file headers, package manifests, directories like node_modules/.venv, and docs. Use before modifications.
Share bugs, ideas, or general feedback.
When integrating external validators (PSScriptAnalyzer, markdownlint, ESLint, etc.), respect upstream defaults. Modify local configuration to match upstream behavior. Do not modify upstream tool code.
Activate when:
Validation failure occurred
|
v
Is the validator upstream (external tool)?
| |
YES NO (local/custom)
| |
v v
Modify LOCAL config Modify tool as needed
to align with tool (you own the code)
|
v
Document override rationale
in config comments
| Scenario | Action | Example |
|---|---|---|
| PSScriptAnalyzer rule fails | Update .psscriptanalyzerrc.psd1 | Suppress PSAvoidUsingWriteHost with rationale |
| markdownlint rule fails | Update .markdownlint.yaml | Disable MD013 line-length for generated docs |
| ESLint rule conflicts | Update .eslintrc | Override no-console for CLI tools |
| Upstream tool has a bug | File issue upstream, add workaround in config | Pin tool version, suppress specific rule |
| Tool default changed after upgrade | Review and align local config to new default | Update config after major version bump |
| Avoid | Why | Instead |
|---|---|---|
| Forking upstream tools to change behavior | Creates maintenance burden, diverges from community | Configure locally, file upstream issues |
| Patching tool source to suppress warnings | Hides real issues, breaks on updates | Use tool's suppression mechanism |
| Disabling entire rule categories | Loses protection the rules provide | Suppress specific rules with rationale |
| Suppressing without rationale | Future maintainers cannot evaluate the override | Always document why in config comments |
| Copying tool defaults into local config | Config drift when upstream updates | Only override what you need to change |
After applying this skill:
Problem: PSAvoidUsingWriteHost fails on a CLI script that intentionally uses Write-Host.
Wrong approach: Modify PSScriptAnalyzer source or remove the rule globally.
Correct approach:
# .psscriptanalyzerrc.psd1
# Rationale: CLI scripts use Write-Host for user-facing output
@{
Rules = @{
PSAvoidUsingWriteHost = @{
Enable = $false
}
}
}
Problem: MD013 (line length) fails on auto-generated documentation.
Wrong approach: Fork markdownlint to increase default line length.
Correct approach:
# .markdownlint.yaml
# Rationale: Generated docs have long lines from tool output
MD013:
line_length: 200
tables: false
Problem: Adding ruff to a Python project. Several existing files fail.
Wrong approach: Disable all failing rules immediately.
Correct approach:
ruff check with defaults to see all violations.# noqa and rationale.pyproject.toml.| Skill | Relationship |
|---|---|
| style-enforcement | Enforces style rules that this skill governs |
| code-qualities-assessment | Quality assessment, not validator config |
| incoherence | Detects contradictions between config and behavior |
External tool integration is a universal software engineering concern. The principle of respecting upstream authority applies to any validator, linter, or static analysis tool regardless of language or framework.