From d13c5dac34a5adc041009f5d5a95a7b583f053ce Mon Sep 17 00:00:00 2001 From: xfodev Date: Sun, 19 Jul 2026 04:31:23 -0700 Subject: [PATCH] fix(content-lane): add snake_case source-url aliases to sourceUrlFields (#7250) --- .../src/review/content-lane/content-repo-spec.ts | 11 +++++++++++ test/unit/content-lane-source-evidence.test.ts | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/loopover-engine/src/review/content-lane/content-repo-spec.ts b/packages/loopover-engine/src/review/content-lane/content-repo-spec.ts index 209e4c7629..3775fda10b 100644 --- a/packages/loopover-engine/src/review/content-lane/content-repo-spec.ts +++ b/packages/loopover-engine/src/review/content-lane/content-repo-spec.ts @@ -106,6 +106,17 @@ export const AWESOME_CLAUDE_CONTENT_SPEC: ContentRepoSpec = { "repositoryUrl", "sourceUrl", "websiteUrl", + // snake_case aliases, matching urlFields one-for-one (#7250): source-evidence.ts read only the camelCase + // names, so an entry using a legitimately-listed snake_case key (e.g. the canonical `source_url`) was visible + // to duplicates.ts but invisible to the source-evidence gate. + "docs_url", + "download_url", + "github_url", + "package_url", + "repo_url", + "repository_url", + "source_url", + "website_url", ], sourceUrlListFields: new Set(["sourceUrls", "retrievalSources"]), distributionSourceFields: new Set(["downloadUrl", "packageUrl"]), diff --git a/test/unit/content-lane-source-evidence.test.ts b/test/unit/content-lane-source-evidence.test.ts index 6795e8dd9b..eb577a0277 100644 --- a/test/unit/content-lane-source-evidence.test.ts +++ b/test/unit/content-lane-source-evidence.test.ts @@ -51,6 +51,18 @@ describe("extractSubmittedSourceUrls", () => { const urls = extractSubmittedSourceUrls(mdx({ downloadUrl: "/downloads/skills/foo.zip" })); expect(urls).toHaveLength(0); }); + + it("reads snake_case source fields (e.g. the canonical source_url), matching urlFields (#7250)", () => { + // Before #7250, sourceUrlFields listed only the camelCase names, so a legitimately-aliased snake_case field + // was invisible to the source-evidence gate even though duplicates.ts (which reads urlFields) saw it. + const pairs = extractSubmittedSourceUrls(mdx({ source_url: "https://github.com/acme/y" })).map((u) => `${u.field}:${u.url}`); + expect(pairs).toContain("source_url:https://github.com/acme/y"); + // Every snake_case alias urlFields carries is now recognized here too. + for (const field of ["docs_url", "download_url", "github_url", "package_url", "repo_url", "repository_url", "source_url", "website_url"]) { + expect(AWESOME_CLAUDE_CONTENT_SPEC.sourceUrlFields).toContain(field); + expect(AWESOME_CLAUDE_CONTENT_SPEC.urlFields.has(field)).toBe(true); + } + }); }); describe("checkSubmittedSourceEvidence", () => {