From 7cfa7759f5c56b63a54062a2a803458eb01270de Mon Sep 17 00:00:00 2001 From: Vinaywho Date: Tue, 28 Apr 2026 16:00:19 +0530 Subject: [PATCH] fix: parseFrontmatter handles CRLF line endings On Windows checkouts, SKILL.md may have CRLF line endings, which caused parseFrontmatter to fall back to {} and the build to prepend a fresh frontmatter block while leaving the original one in the body. The result was the dist Qoder SKILL.md shipping with two frontmatter blocks and losing user-invocable / argument-hint / license / allowed-tools metadata. Make the regex and YAML line split CRLF-tolerant. Regenerated tracked .qoder/skills/impeccable/SKILL.md is now a single, well-formed frontmatter block. Co-Authored-By: Claude Opus 4.7 (1M context) --- .qoder/skills/impeccable/SKILL.md | 13 ++++--------- scripts/lib/utils.js | 4 ++-- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/.qoder/skills/impeccable/SKILL.md b/.qoder/skills/impeccable/SKILL.md index 8b224f6b4..fa5906859 100644 --- a/.qoder/skills/impeccable/SKILL.md +++ b/.qoder/skills/impeccable/SKILL.md @@ -1,17 +1,12 @@ --- name: impeccable -description: "" +description: Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks. version: 3.0.4 ---- - ---- -name: impeccable -description: "Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks." -argument-hint: "[{{command_hint}}] [target]" user-invocable: true +argument-hint: "[craft|shape · audit|critique · animate|bolder|colorize|delight|layout|overdrive|quieter|typeset · adapt|clarify|distill · harden|onboard|optimize|polish · teach|document|extract|live] [target]" +license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution. allowed-tools: - Bash(npx impeccable *) -license: Apache 2.0. Based on Anthropic's frontend-design skill. See NOTICE.md for attribution. --- Designs and iterates production-grade frontend interfaces. Real working code, committed design choices, exceptional craft. @@ -181,4 +176,4 @@ If the first word is `craft`, setup still runs first, but [reference/craft.md](r node .qoder/skills/impeccable/scripts/pin.mjs ``` -Valid `` is any command from the table above. Report the script's result concisely — confirm the new shortcut on success, relay stderr verbatim on error. +Valid `` is any command from the table above. Report the script's result concisely — confirm the new shortcut on success, relay stderr verbatim on error. \ No newline at end of file diff --git a/scripts/lib/utils.js b/scripts/lib/utils.js index 6c416f096..a277f6b73 100644 --- a/scripts/lib/utils.js +++ b/scripts/lib/utils.js @@ -45,7 +45,7 @@ export function restorePerProjectArtifacts(rootDir, stashed) { * Returns { frontmatter: object, body: string } */ export function parseFrontmatter(content) { - const frontmatterRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/; + const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/; const match = content.match(frontmatterRegex); if (!match) { @@ -56,7 +56,7 @@ export function parseFrontmatter(content) { const frontmatter = {}; // Simple YAML parser (handles basic key-value and arrays) - const lines = frontmatterText.split('\n'); + const lines = frontmatterText.split(/\r?\n/); let currentKey = null; let currentArray = null;