Development record
abcd docs lint walks gitignored content under a lint root. In a repository whose lint roots include a delivery folder, a shipped fetch script writes assessment data and a cached git clone of the abcd repository under that folder, which .gitignore excludes; the lint read the whole cached clone (5,391 findings, 94 blockers, all inside the ignored folder, none in the repository's own prose). exempt_paths covers the content-authoring families only, so with the folder exempted ten links_resolve blockers still fire from inside the cache, whose record files link to paths that resolve only in the abcd checkout. A gitignored path is by definition not the repository's documentation; the lint could ask git check-ignore once per root and prune ignored directories, the way the site publisher already does, and name what it pruned. Workaround the adopter took: the fetch script keeps its clone cache outside every lint root. Observed on the v0.8.0 plugin binary. Second instance of the class behind iss-2609151150180583 (exempt_paths cannot excuse links_resolve).
abcd docs lint walks gitignored content under a lint root. In a repository whose lint roots include a delivery folder, a shipped fetch script writes assessment data and a cached git clone of the abcd repository under that folder, which .gitignore excludes; the lint read the whole cached clone (5,391 findings, 94 blockers, all inside the ignored folder, none in the repository's own prose). exempt_paths covers the content-authoring families only, so with the folder exempted ten links_resolve blockers still fire from inside the cache, whose record files link to paths that resolve only in the abcd checkout. A gitignored path is by definition not the repository's documentation; the lint could ask git check-ignore once per root and prune ignored directories, the way the site publisher already does, and name what it pruned. Workaround the adopter took: the fetch script keeps its clone cache outside every lint root. Observed on the v0.8.0 plugin binary. Second instance of the class behind iss-2609151150180583 (exempt_paths cannot excuse links_resolve).
Grounds
- pursued: a cached clone under a lint root raises no finding and is named as pruned while a committed file a pattern matches is still read; a finding from an ignored path, or a tracked file skipped, would show it wrong
Frontmatter
| id | iss-2609151952353626 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2609151952353626-abcd-docs-lint-walks-gitignored-content.md
open on GitHub ↗ · commit history ↗
mentions1
- iss-2609151150180583docs lint: exempt_paths cannot excuse a file from links_resolve. contentExempt (internal/core/lint/lint.go, around the function at line 2675) covers only the content-authoring checks (banned_tokens, persona_registry), so a tool-mandated mirror of a root file into a subdirectory (a repo that must carry .github/copilot-instructions.md byte-identical to its root AGENTS.md, because that tool follows no pointer) raises a links_resolve blocker per relative link that resolves from the root and not from the mirror's directory, with no way to excuse it short of dropping the links. Observed on the v0.8.0 plugin binary: three blockers on one mirror. Workaround the adopter took: name companion pages as backticked paths with a shell guard checking each exists. Either let exempt_paths (or a dedicated key) excuse a path from links_resolve, or document that the link check has no exemption so authors of tool-mandated mirrors know in advance.