Skip to content

Commit dfaeac2

Browse files
committed
fix: isolate canonical reader test context
1 parent f81c2d8 commit dfaeac2

1 file changed

Lines changed: 22 additions & 5 deletions

File tree

scripts/lib/canonical-consumer-contracts.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,15 +127,32 @@ function isOptionalMaintainerWebsiteNegativeNeedle(needle) {
127127

128128
function createCanonicalAwareReader(root, readRaw, existsRaw = file => fs.existsSync(file)) {
129129
let deliveryFiles = null
130+
let maintainerWebsiteIgnorePolicy
131+
function hasMaintainerWebsiteIgnorePolicyForReader() {
132+
if (maintainerWebsiteIgnorePolicy != null) return maintainerWebsiteIgnorePolicy
133+
try {
134+
const ignore = readRaw(path.join(root, '.gitignore'))
135+
maintainerWebsiteIgnorePolicy = String(ignore).includes('website/*') && String(ignore).includes('!website/README.md')
136+
} catch {
137+
maintainerWebsiteIgnorePolicy = false
138+
}
139+
return maintainerWebsiteIgnorePolicy
140+
}
141+
function isOptionalMaintainerWebsiteAssetForReader(relative) {
142+
const normalized = String(relative || '').replace(/\\/g, '/')
143+
return normalized.startsWith('website/') &&
144+
normalized !== 'website/README.md' &&
145+
hasMaintainerWebsiteIgnorePolicyForReader()
146+
}
130147
function readCanonicalDelivery(relative) {
131148
if (!/^(?:instructions\.md|(?:instructions|prompts)\/.+|skills\/.+)$/.test(relative)) {
132149
return null
133150
}
134-
if (!fs.existsSync(path.join(root, 'content', 'manifest.json'))) return null
151+
if (!existsRaw(path.join(root, 'content', 'manifest.json'))) return null
135152
const canonicalAsset = resolveControlAsset(root, relative)
136-
if (canonicalAsset !== path.join(root, relative) && fs.existsSync(canonicalAsset) &&
153+
if (canonicalAsset !== path.join(root, relative) && existsRaw(canonicalAsset) &&
137154
!/^(?:instructions\.md|(?:instructions|prompts)\/.+\.md|skills\/[^/]+\/SKILL\.md)$/.test(relative)) {
138-
return fs.readFileSync(canonicalAsset, 'utf8')
155+
return readRaw(canonicalAsset)
139156
}
140157
if (!deliveryFiles) {
141158
deliveryFiles = new Map(
@@ -154,7 +171,7 @@ function createCanonicalAwareReader(root, readRaw, existsRaw = file => fs.exists
154171
} catch (error) {
155172
const canonical = error?.code === 'ENOENT' ? readCanonicalDelivery(relative) : null
156173
if (canonical == null) {
157-
if (!isOptionalMaintainerWebsiteAsset(root, relative)) throw error
174+
if (!isOptionalMaintainerWebsiteAssetForReader(relative)) throw error
158175
optionalMaintainerWebsite = true
159176
value = ''
160177
} else {
@@ -175,7 +192,7 @@ function createCanonicalAwareReader(root, readRaw, existsRaw = file => fs.exists
175192
read.exists = function exists(file) {
176193
if (existsRaw(file)) return true
177194
const relative = path.relative(root, file).replace(/\\/g, '/')
178-
if (isOptionalMaintainerWebsiteAsset(root, relative)) return true
195+
if (isOptionalMaintainerWebsiteAssetForReader(relative)) return true
179196
return readCanonicalDelivery(relative) != null
180197
}
181198

0 commit comments

Comments
 (0)