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
Default Standard naming renames compound keys to a different field: author_email → author, previous_version → version #162
For a key that has neither an exact nor a known mapping, NameStandardizer.FindStandardPropertyMatch (Frontmatter/NameStandardizer.cs, the partial-match loop around line 127) accepts any standard property whose normalized name is a substring of the key (normalizedKey.Contains(normalizedStandard)). It then renames the key to that property. This happens even when nothing else claims the name. StandardOrder.PropertyNames includes author, version, image, slug, url, date and others, so many ordinary compound keys get renamed to a field that means something else.
Repro (default overload: Standard naming, Conservative merge)
Expected: author_email and previous_version are kept as they are.
Under FrontmatterMergeStrategy.None, these renames also happen:
image_credit: Jane Doe becomes image: Jane Doe
url_slug_notes: see wiki becomes slug: see wiki
Why it matters
The document now claims its author is an email address and that the current version is the previous one. Any static-site generator or tool that reads author, version or image gets the wrong value. Nothing warns the user, and the original key is gone. This is not #136: that issue is two keys colliding on one name. Here a single key is renamed to a field with a different meaning.
Suggested fix / acceptance criteria
The containment heuristic is intentional: tests expect url to match canonical_url, and #128 added a minimum length. It needs to tell apart a key that decorates a standard name from one that qualifies it. Options:
Only allow the standard ⊂ key direction when the leftover words are known decoration, meaning the prefix and suffix lists PropertyNameNormalizer already strips. Otherwise keep the key as it is.
Or require the word sets from NormalizeToWords to match, allowing for a plural.
Acceptance: author_email, previous_version and image_credit pass through CombineFrontmatter unchanged. The existing containment tests, such as MergeSimilarProperties_WithContainmentSimilarity_MapsCorrectly, still pass or are updated on purpose.
Priority: High. Silent data corruption under the default options: author_email becomes author and previous_version becomes version, and the original key is gone. Downstream site generators then read an email address as the author and the previous version as the current one. No warning is given.
Area / suggested owner: Partial-match (containment) loop in NameStandardizer.FindStandardPropertyMatch
Notes: Of the two options in the issue, "leftover words must be known decoration" matches the existing intent (canonical_url → url) most closely. Also check the other direction, where a key is a substring of a standard name, for the same problem.
Activity
matt-edmondson commentedon Sep 27, 2026
Triage
author_emailbecomesauthorandprevious_versionbecomesversion, and the original key is gone. Downstream site generators then read an email address as the author and the previous version as the current one. No warning is given.NameStandardizer.FindStandardPropertyMatchcanonical_url→url) most closely. Also check the other direction, where a key is a substring of a standard name, for the same problem.Generated by Claude Code
matt-edmondson commentedon Sep 30, 2026
Covered by #180, which redesigns this bug cluster as a whole. Implement it through that issue rather than individually.
Generated by Claude Code