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 514f707
Browse filesBrowse the repository at this point in the historyBrowse files
fix: three review findings — a too-broad widening, a case-folding hole, a tense
Review of the preceding two commits found three defects in them.
1. The `expectError: true` widening was too broad, and weakened six cases to buy
one. `true` had a stronger meaning than the README's wording admitted, and all
three coded ports implemented it identically: "raises the port's coded metadata
error; WHICH code is unpinned". The type was pinned. Relaxing the whole arm to
bare Exception/`Throwable` so the symlink cycle could raise a native
IOException also relaxed `sources-must-be-an-array-not-an-object` and its five
siblings, which would now PASS on a raw NullReferenceException / NPE /
TypeError — a crash scoring as a correct rejection. The allowance is now scoped
to the single case that needs it via a new optional `errorIsNative`, the coded
type is required everywhere else, and the README says which of the two `true`
pins (the type) and which it does not (the code). TypeScript is unaffected and
stays loose: it propagates the raw parser error, which is why the code is
unpinned in the first place.
2. The cycle guard's ancestor set compared `StringComparer.Ordinal` while
`RealPath` necessarily mixes spellings — a non-link segment keeps the caller's
casing via `GetFullPath`, a resolved link comes back in the filesystem's
canonical casing. On a case-insensitive volume `MODEL/loop -> model` therefore
walked straight past the guard, back down to the kernel ELOOP floor that the new
immediacy test claims to have removed — and this is the one port whose
enumeration SWALLOWS ELOOP, so there is no backstop under it. Now Ordinal on
Linux (where `Model` and `model` are genuinely different directories and folding
would reject a valid tree) and case-insensitive elsewhere.
3. `--print-only` suppressed the writes but not the past-tense reporting, so a
dry run announced `wired @.metaobjects/AGENTS.md into CLAUDE.md` and `refreshed
version written to <path>.new` for edits it had not made. Worse than the silent
write it replaced: it names a side effect on a file the user owns, which they can
go look for and will not find. All three messages are future-tense under a dry
run, pinned by a test asserting no past-tense form survives.
That test caught its own fix at first: `\bcreated with\b` also matches the
CORRECT "(would be created with …)". Anchored.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
0 commit comments