Fix wrapped design characteristics

Join indented Markdown bullet continuations and keep them out of Overview philosophy text.

AI assistance: Codex reproduced the issue, implemented the fix, and added regression coverage under maintainer authorization.
This commit is contained in:
Paul Bakaus
2026-07-31 17:21:29 -07:00
parent 32930818a1
commit c5eb38a381
2 changed files with 32 additions and 8 deletions
+7 -8
View File
@@ -330,17 +330,16 @@ function extractOverview(section) {
if (!section) return null;
const text = section.lines.join('\n');
const northStar = text.match(/\*\*Creative North Star:\s*"([^"]+)"\*\*/);
const keyChars = [];
const keyCharMatch = text.match(/\*\*Key Characteristics:\*\*\s*\n([\s\S]+?)(?:\n##|\n###|$)/);
if (keyCharMatch) {
for (const line of keyCharMatch[1].split('\n')) {
const m = line.match(/^\s*[-*]\s+(.+)$/);
if (m) keyChars.push(stripBold(m[1].trim()));
}
}
const keyChars = keyCharMatch
? collectBullets(keyCharMatch[1].split('\n')).map((bullet) => stripBold(bullet.trim()))
: [];
const prose = keyCharMatch
? text.slice(0, keyCharMatch.index) + text.slice(keyCharMatch.index + keyCharMatch[0].length)
: text;
// Philosophy paragraphs: everything that isn't a rule header or key-char block
const paragraphs = collectParagraphs(section.lines).filter(
const paragraphs = collectParagraphs(prose.split('\n')).filter(
(p) =>
!p.startsWith('**Creative North Star') &&
!p.startsWith('**Key Characteristics')
+25
View File
@@ -143,3 +143,28 @@ Prose.
assert.equal(model.frontmatter.rounded['"2xl"'], undefined);
});
});
describe('parseDesignMd overview branch', () => {
it('joins wrapped Key Characteristics bullets without leaking continuations into philosophy', () => {
const md = `# Design System: Example
## Overview
**Creative North Star: "Structured clarity"**
**Key Characteristics:**
- Status remains understandable without relying on color
alone.
- Navigation controls remain visible when the viewport becomes
narrow.
`;
const overview = parseDesignMd(md).overview;
assert.deepEqual(overview.keyCharacteristics, [
'Status remains understandable without relying on color alone.',
'Navigation controls remain visible when the viewport becomes narrow.',
]);
assert.deepEqual(overview.philosophy, []);
});
});