You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit db3c226
Browse filesBrowse the repository at this point in the historyBrowse files
fix(cli): the hash-manifest advisory named a file that may not hold the rule
It hardcoded `.metaobjects/.gitignore` and the literal pattern `.gen-state/`. That
is one of several places the exclusion can sit — any `.gitignore` up the tree,
`.git/info/exclude`, a per-user excludes file. Found by running an adopter estate
against the RC: its rule was in the ROOT `.gitignore` as `.metaobjects/.gen-state/`,
so following the advisory to the letter edited a file that did not hold the rule,
changed nothing, and printed the same line again. The loop shape, in a second
command — and I hit it myself before reading the code.
`git check-ignore -v` returns the exact `<file>:<line>:<pattern>` that matched, and
this check already shells out to `check-ignore` for the verdict, so nothing new has
to be assumed. New `gitIgnoreSource()` asks it; the advisory names the real rule and
builds the `/*` + `!` negation from the pattern it found. When git cannot say, the
wording degrades to "find it with `git check-ignore -v …`" instead of asserting a
location — the same discipline the rest of the check follows, where "cannot say" is
never reported as a fact. The VERDICT still comes from `isGitIgnored`, so a failure
in the new lookup weakens the wording and never the check.
Gated by the estate's own shape (the rule in a parent .gitignore), and proved by
BREAKING it: reverting the source alone reds both new cases.
cli: 920 pass, 0 fail.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NTcEKXTQMYt84fAjuw5A2M
0 commit comments