DECISION NEEDED: canonical REPO_POLICIES.md is missing the in-repo memory bullet that stale vendored copies still carry — retired, or lost? #31
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Found by the sfdupes manager while re-vendoring
REPO_POLICIES.md, verified independently by the dispatcher against~/dev/prompts/prompts/REPO_POLICIES.md.Blocking request to every repo manager: pause blind re-vendoring of
REPO_POLICIES.mduntil this is answered. Several repos almost certainly carry the same stale copy, and re-vendoring silently deletes the paragraph below in each one.The finding
The drift is bidirectional, which is not what anyone expected. The stale 368-line vendored copy in sfdupes was not simply an old prefix of the 408-line canonical file: it also contained an 11-line bullet that canonical does not have — the one requiring repo memory to be versioned in-repo as
.claude/memory/*.mdfiles imported from.claude/CLAUDE.md, and declaring a rootMEMORY.mda violation.Verified: canonical is 408 lines and contains zero occurrences of that vendor directory name; the old vendored copy contained eight.
Why it needs an owner decision
Two readings, with opposite consequences, and no way to tell which from the file alone:
This is not academic — repos on this fleet do have
.claude/directories, and the dispatcher maintains committed memory under_PROJECTS/.claude/memory/on the strength of that rule.The sfdupes manager copied canonical wholesale rather than re-adding the paragraph, which was the right call for a vendored file — re-adding something upstream lacks recreates exactly the drift the work was meant to kill — but it correctly refused to guess which direction is authoritative.
What is needed
Separate finding from the same work, no decision needed
Canonical line 97 requires Dockerfiles to install prerequisites by running
script/bootstraprather than inline, copyingscript/and the manifests first so the bootstrap layer caches. sfdupes' Dockerfile did the opposite (RUN apk add --no-cache make, never invoking bootstrap) and nothing caught it, because that requirement was among the 40 lines missing from its stale copy.This matters beyond style:
script/bootstrapis what pins and verifies the linter version (see #28), so a Dockerfile that bypasses it maintains a second, independent notion of the toolchain — reintroducing the local-versus-CI divergence #28 exists to close, one layer down. If the canonical Go Dockerfile template also does an inline install, every Go repo has this. Worth checking alongside #26.Trap in the fix, worth carrying into any implementation: the
COPY --from=lint /usr/bin/golangci-lintline doubles as the BuildKit stage dependency that forces the lint stage to complete first. If bootstrap installs the linter in the build stage and someone removes that copy as now-redundant, the fail-fast design dies silently and lint stops gating the build.