From c353964d85c0c79c4cc4304990356bbba2d152a2 Mon Sep 17 00:00:00 2001 From: Ross Blair Date: Wed, 18 Mar 2026 15:37:48 -0500 Subject: [PATCH 1/3] Validate prov entities in filenames against prov entities in path. Skip unused file check for prov files. --- src/validators/filenameValidate.ts | 10 ++++++++++ src/validators/internal/unusedFile.ts | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/validators/filenameValidate.ts b/src/validators/filenameValidate.ts index 32a982f3e..1839a5884 100644 --- a/src/validators/filenameValidate.ts +++ b/src/validators/filenameValidate.ts @@ -284,6 +284,16 @@ async function invalidLocation( if (context.directory) { return } + if (context.entities.prov && context.path.starstWith('/prov/prov-')) { + if (context.path.starstWith(`/prov/prov-${context.entities.prov}`)) { + context.dataset.issues.add({ + code: 'INVALID_LOCATION', + location: context.path, + issueMessage: `Expected location: /prov/prov-${context.entities.prov}`, + }) + return + } + } if (!context.entities.tpl) { _validateLocation(context, 'sub', 'ses') } diff --git a/src/validators/internal/unusedFile.ts b/src/validators/internal/unusedFile.ts index 08dfe77b9..4b1558baf 100644 --- a/src/validators/internal/unusedFile.ts +++ b/src/validators/internal/unusedFile.ts @@ -41,7 +41,7 @@ export async function sidecarWithoutDatafile( ) { const unusedSidecars = [...walkFileTree(dsContext.tree, dsContext)].filter( (file) => (!file.viewed && file.name.endsWith('.json') && - !standalone_json.includes(file.name)), + !standalone_json.includes(file.name) && !file.path.startsWith('/prov')), ) unusedSidecars.forEach((sidecar) => { dsContext.issues.add({ code: 'SIDECAR_WITHOUT_DATAFILE', location: sidecar.path }) From bfd055393dab1b2db83fb7e456e1b3620179c3e6 Mon Sep 17 00:00:00 2001 From: Ross Blair Date: Thu, 2 Apr 2026 14:07:00 -0500 Subject: [PATCH 2/3] fix misspelled startWith calls. --- src/validators/filenameValidate.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/validators/filenameValidate.ts b/src/validators/filenameValidate.ts index 1839a5884..3433f1567 100644 --- a/src/validators/filenameValidate.ts +++ b/src/validators/filenameValidate.ts @@ -284,8 +284,8 @@ async function invalidLocation( if (context.directory) { return } - if (context.entities.prov && context.path.starstWith('/prov/prov-')) { - if (context.path.starstWith(`/prov/prov-${context.entities.prov}`)) { + if (context.entities.prov && context.path.startsWith('/prov/prov-')) { + if (context.path.startsWith(`/prov/prov-${context.entities.prov}`)) { context.dataset.issues.add({ code: 'INVALID_LOCATION', location: context.path, From cfeb7332b96ffd1b1d27566b7edea4a4845d387b Mon Sep 17 00:00:00 2001 From: Ross Blair Date: Thu, 2 Apr 2026 14:26:00 -0500 Subject: [PATCH 3/3] Invert logic checking entity match for prov dirs --- src/validators/filenameValidate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/validators/filenameValidate.ts b/src/validators/filenameValidate.ts index 3433f1567..7abb2147b 100644 --- a/src/validators/filenameValidate.ts +++ b/src/validators/filenameValidate.ts @@ -285,7 +285,7 @@ async function invalidLocation( return } if (context.entities.prov && context.path.startsWith('/prov/prov-')) { - if (context.path.startsWith(`/prov/prov-${context.entities.prov}`)) { + if (!context.path.startsWith(`/prov/prov-${context.entities.prov}`)) { context.dataset.issues.add({ code: 'INVALID_LOCATION', location: context.path,