Scope the .golangci.yml agent prohibition to vendored copies #49
Reference in New Issue
Block a user
Delete Branch "policy/scope-golangci-rule-to-vendored-copies"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
SPECULATIVE and ahead of your ruling — nothing here is urgent and closing it costs nothing. One sentence of policy prose changed; no config file is touched.
The contradiction
REPO_POLICIES.mdline 266 currently reads:>
.golangci.ymlis standardized and must NEVER be modified by an agent, only manually by the user.Stated unqualified, that forbids an agent from modifying
.golangci.ymlanywhere — including the canonical copy in this repo, which is the only place it can ever be fixed. An agent that wants to remediate a linter problem must either violate the rule or leave the problem standing. A rule that cannot be complied with and satisfied at the same time gets resolved ad hoc, differently by each reader, which is the worst of both outcomes it was trying to produce.This is not hypothetical. It has already cost real time:
gomodguarddeprecation (#25) has been open since 2026-08-07 and still prints on every lint run in every consuming Go repo.Each new agent that meets the rule reruns this whole argument.
The change
Scope the prohibition to the vendored copy, and name the one legitimate path by which the config can change:
The version pin sentence that followed is unchanged.
This keeps the property the rule exists for — no repo silently weakens its own linting, and divergence from canonical stays detectable — while removing the reading that freezes canonical itself. Your control is not reduced: an agent may open a PR here, and only you merge it.
Scope of the wording sweep
I grepped every
.mdin the repo for the absolute phrasing. It appears in exactly one place,prompts/REPO_POLICIES.mdlines 266-267.EXISTING_REPO_CHECKLIST.md(line 39) andNEW_REPO_CHECKLIST.md(line 63) both mention.golangci.yml, but only as "fetch fromhttps://git.eeqj.de/sneak/prompts/raw/branch/main/.golangci.yml" — an instruction to vendor canonical verbatim, which is exactly what the scoped rule says. Neither carries a prohibition, so neither needs changing and neither is left contradicting the other.REPO_POLICIES.mdline 414 lists.golangci.ymlas a required file, also unaffected.Note that the repo-root
REPO_POLICIES.mdis a symlink toprompts/REPO_POLICIES.md, so the single edit covers both paths.Deliberately NOT included
This PR does not change
.golangci.yml. Thegomodguardfix stays in #47 so the two can be judged separately — the policy question is worth settling on its own terms regardless of what you decide about that config change, and merging them would collapse two decisions into one.Unrelated observation, for the record
While verifying #47 against a scratch
sneak/homoiconclone, I found that homoicon's vendored.golangci.ymlis sha256391ea68e637432980f1db0776076f51578fa58193bbd17f4b40ad725975e21f8, while canonicalmainis021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb. The whole difference is a three-line comment recording a one-time agent edit you authorized on 2026-08-07; the config is functionally identical.That matters only if you ever want a hash-based drift guard against canonical, which #25 floats as an offline alternative to
golangci-lint config verify: such a guard would already report homoicon as drifted on day one. Worth knowing before building one. No change proposed here.Validation
make checkpasses (prettier --check '**/*.md' --tab-width 4 --prose-wrap always: all matched files clean).make fmtproduced no further changes.last_modifiedin the front matter updated to 2026-08-19 per this file's own rule.