From 070efe50a84c2a623de53fa5782b614c7a0c8c3a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 17 Mar 2026 02:49:39 +0000 Subject: [PATCH 1/2] fix(v3): lint guard passes cleanly on epic/v3 - add ignore rules for core-styles.*.css entry points and demo/example files - rename four .css source files to .postcss (brought from main without rename) - update all @import references to the renamed files Co-authored-by: Wesley B --- bin/only-commit-source.js | 14 +++++++++++++- src/lib/_imports/components/c-tag.postcss | 2 +- .../{cms-pagination.css => cms-pagination.postcss} | 0 src/lib/_imports/objects/o-offset-content.postcss | 2 +- src/lib/_imports/tools/x-offset-content.demo.css | 2 +- ...offset-content.css => x-offset-content.postcss} | 0 src/lib/_imports/tools/x-pill.demo.css | 2 +- .../_imports/tools/{x-pill.css => x-pill.postcss} | 0 src/lib/_imports/tools/x-tag.demo.css | 2 +- .../_imports/tools/{x-tag.css => x-tag.postcss} | 0 10 files changed, 18 insertions(+), 6 deletions(-) rename src/lib/_imports/djangocms-blog/{cms-pagination.css => cms-pagination.postcss} (100%) rename src/lib/_imports/tools/{x-offset-content.css => x-offset-content.postcss} (100%) rename src/lib/_imports/tools/{x-pill.css => x-pill.postcss} (100%) rename src/lib/_imports/tools/{x-tag.css => x-tag.postcss} (100%) diff --git a/bin/only-commit-source.js b/bin/only-commit-source.js index c4adf4b12..7b08b1b81 100755 --- a/bin/only-commit-source.js +++ b/bin/only-commit-source.js @@ -18,11 +18,23 @@ function findBuiltFiles( dir ) { } const isProbablyBuilt = filePath.endsWith('.css'); + const basename = path.basename( filePath, '.css' ); + + // `core-styles.*.css` files are consumer-facing entry points in `_imports/`; + // they aggregate @imports for a client library and must be published. + const isEntryPoint = /_imports\/core-styles\.[^/]+\.css$/.test( relativePath ); + + // Files whose name starts with `demo` / `example`, or contains `.demo`, + // are Fractal-only demo helpers and are never compiled into the package. + const isDemoOrExample = /(?:^demo(?:[.-]|$)|\.demo(?:[.-]|$)|^example(?:[.-]|$))/.test( basename ); + const shouldIgnore = ( /_imports\/[^/]+\/[^/]+\/[^/]+\.css$/.test(relativePath) || filePath.endsWith('fractal.server.refresh.css') || relativePath.includes('_imports/vendors') || - filePath.endsWith('README.css') + filePath.endsWith('README.css') || + isEntryPoint || + isDemoOrExample ); if ( isProbablyBuilt && ! shouldIgnore ) { diff --git a/src/lib/_imports/components/c-tag.postcss b/src/lib/_imports/components/c-tag.postcss index 2a1c1734a..de4acb4a1 100644 --- a/src/lib/_imports/components/c-tag.postcss +++ b/src/lib/_imports/components/c-tag.postcss @@ -1,4 +1,4 @@ -@import url("../tools/x-tag.css"); +@import url("../tools/x-tag.postcss"); @import url("./c-tag.selectors.postcss"); diff --git a/src/lib/_imports/djangocms-blog/cms-pagination.css b/src/lib/_imports/djangocms-blog/cms-pagination.postcss similarity index 100% rename from src/lib/_imports/djangocms-blog/cms-pagination.css rename to src/lib/_imports/djangocms-blog/cms-pagination.postcss diff --git a/src/lib/_imports/objects/o-offset-content.postcss b/src/lib/_imports/objects/o-offset-content.postcss index e848cfc21..1b91cecbb 100644 --- a/src/lib/_imports/objects/o-offset-content.postcss +++ b/src/lib/_imports/objects/o-offset-content.postcss @@ -8,7 +8,7 @@ Content that should be: Styleguide Objects.OffsetContent */ @import url("../tools/media-queries.postcss"); -@import url("../tools/x-offset-content.css"); +@import url("../tools/x-offset-content.postcss"); .o-offset-content--left, .o-offset-content--right { diff --git a/src/lib/_imports/tools/x-offset-content.demo.css b/src/lib/_imports/tools/x-offset-content.demo.css index a75988d81..6645ff34c 100644 --- a/src/lib/_imports/tools/x-offset-content.demo.css +++ b/src/lib/_imports/tools/x-offset-content.demo.css @@ -1,6 +1,6 @@ /* This CSS is ONLY for the pattern library. It is NOT part of the pattern. */ -@import url("./x-offset-content.css"); +@import url("./x-offset-content.postcss"); .x-offset-content--left, .x-offset-content--right { diff --git a/src/lib/_imports/tools/x-offset-content.css b/src/lib/_imports/tools/x-offset-content.postcss similarity index 100% rename from src/lib/_imports/tools/x-offset-content.css rename to src/lib/_imports/tools/x-offset-content.postcss diff --git a/src/lib/_imports/tools/x-pill.demo.css b/src/lib/_imports/tools/x-pill.demo.css index 29f65efef..d4c05e55b 100644 --- a/src/lib/_imports/tools/x-pill.demo.css +++ b/src/lib/_imports/tools/x-pill.demo.css @@ -1,4 +1,4 @@ -@import url("./x-pill.css"); +@import url("./x-pill.postcss"); /* FAQ: Wrapped to deter clients from using `.x-pill` */ /* HACK: Not in `x-pill/demo.css` because it is not processed */ diff --git a/src/lib/_imports/tools/x-pill.css b/src/lib/_imports/tools/x-pill.postcss similarity index 100% rename from src/lib/_imports/tools/x-pill.css rename to src/lib/_imports/tools/x-pill.postcss diff --git a/src/lib/_imports/tools/x-tag.demo.css b/src/lib/_imports/tools/x-tag.demo.css index 6ee8e9617..c0d71d00d 100644 --- a/src/lib/_imports/tools/x-tag.demo.css +++ b/src/lib/_imports/tools/x-tag.demo.css @@ -1,4 +1,4 @@ -@import url("./x-tag.css"); +@import url("./x-tag.postcss"); /* FAQ: Wrapped to deter clients from using `.x-tag` */ /* HACK: Not in `x-tag/demo.css` because it is not processed */ diff --git a/src/lib/_imports/tools/x-tag.css b/src/lib/_imports/tools/x-tag.postcss similarity index 100% rename from src/lib/_imports/tools/x-tag.css rename to src/lib/_imports/tools/x-tag.postcss From 185063c7b3198398f64fa01958f4fa31fa24bc11 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 17 Mar 2026 04:39:38 +0000 Subject: [PATCH 2/2] refactor(v3): name and comment all shouldIgnore clauses in lint guard Co-authored-by: Wesley B --- bin/only-commit-source.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/bin/only-commit-source.js b/bin/only-commit-source.js index 7b08b1b81..7a1a6a4ac 100755 --- a/bin/only-commit-source.js +++ b/bin/only-commit-source.js @@ -20,6 +20,11 @@ function findBuiltFiles( dir ) { const isProbablyBuilt = filePath.endsWith('.css'); const basename = path.basename( filePath, '.css' ); + // `.css` files exactly 2 directories below `_imports/` are source files + // in the reorganized third-party library structure (e.g. Bootstrap 4/5). + // They use `.css` extension by convention and are not build artifacts. + const isLibrarySource = /_imports\/[^/]+\/[^/]+\/[^/]+\.css$/.test( relativePath ); + // `core-styles.*.css` files are consumer-facing entry points in `_imports/`; // they aggregate @imports for a client library and must be published. const isEntryPoint = /_imports\/core-styles\.[^/]+\.css$/.test( relativePath ); @@ -28,10 +33,14 @@ function findBuiltFiles( dir ) { // are Fractal-only demo helpers and are never compiled into the package. const isDemoOrExample = /(?:^demo(?:[.-]|$)|\.demo(?:[.-]|$)|^example(?:[.-]|$))/.test( basename ); + // `_imports/vendors/` exists on epic/v3 but is removed on epic/v3--reorg; + // this rule becomes a no-op once the reorg merges in. + const isVendored = relativePath.includes( '_imports/vendors' ); + const shouldIgnore = ( - /_imports\/[^/]+\/[^/]+\/[^/]+\.css$/.test(relativePath) || + isLibrarySource || filePath.endsWith('fractal.server.refresh.css') || - relativePath.includes('_imports/vendors') || + isVendored || filePath.endsWith('README.css') || isEntryPoint || isDemoOrExample