diff --git a/skill/scripts/lib/staleness-deep.mjs b/skill/scripts/lib/staleness-deep.mjs index f406a7102..d98c97d19 100644 --- a/skill/scripts/lib/staleness-deep.mjs +++ b/skill/scripts/lib/staleness-deep.mjs @@ -123,7 +123,7 @@ function hasCoverageValue(value) { return Object.values(value).some(hasCoverageValue); } if (typeof value === 'string') return value.trim().length > 0; - return value !== null && value !== undefined; + return false; } export function checkDesignCoverage({ design, designPath, parseDesignMd }) { diff --git a/tests/doctor.test.mjs b/tests/doctor.test.mjs index 4887800df..41ab21063 100644 --- a/tests/doctor.test.mjs +++ b/tests/doctor.test.mjs @@ -216,6 +216,29 @@ describe('checkDesignCoverage', () => { assert.doesNotMatch(findings[0].summary, /typography|components/); }); + it('does not count boolean or numeric frontmatter scalars as section coverage', () => { + for (const colors of ['false', '0']) { + const design = [ + '---', + 'name: X', + `colors: ${colors}`, + 'typography:', + ' body:', + ' fontFamily: Inter', + 'components:', + ' button:', + ' backgroundColor: "#111111"', + '---', + '', + '# Design System: X', + '', + ].join('\n'); + const findings = checkDesignCoverage({ design, designPath: 'DESIGN.md', parseDesignMd }); + assert.deepEqual(ids(findings), ['design-md-coverage']); + assert.match(findings[0].summary, /no colors section/); + } + }); + it('reports nothing without a DESIGN.md', () => { assert.deepEqual(checkDesignCoverage({ design: null, parseDesignMd }), []); });