From 3fc6b67e10aafce5ba2a0acef9e9c4bb1bbac595 Mon Sep 17 00:00:00 2001 From: Kyle McCullough Date: Sun, 3 May 2026 10:16:47 -0300 Subject: [PATCH 1/2] Grant release workflow write permissions for changesets Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/release.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d6d42f8..c05ceab 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,6 +5,11 @@ on: push: branches: [main] +permissions: + contents: write + pull-requests: write + id-token: write + jobs: release: runs-on: ubuntu-latest From 3e1710bb125cafc4919f5f32bf499cad7dfbb013 Mon Sep 17 00:00:00 2001 From: Kyle McCullough Date: Tue, 5 May 2026 11:01:34 -0300 Subject: [PATCH 2/2] Harden CSS emission, component spec validation, and CMS session host Adds css-safety guards (custom-property name/value/comment escaping) used across token emission, component compilation, and future layout output. Validates component specs against unsafe object keys and unknown states, and refuses to silently rebase a CMS session onto a different base URL. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/release.yml | 2 +- .../src/lib/breadcrumbs/Breadcrumbs.svelte | 6 +- .../breadcrumbs/Breadcrumbs.svelte.test.ts | 14 +++ .../components/src/lib/button/Button.svelte | 7 +- .../src/lib/button/Button.svelte.test.ts | 8 ++ .../components/src/lib/shared/recipe.test.ts | 34 +++++++ packages/components/src/lib/shared/recipe.ts | 7 +- packages/components/src/lib/shared/url.ts | 19 ++++ .../components/src/lib/toast/Toast.svelte | 6 +- .../src/lib/toast/Toast.svelte.test.ts | 23 +++++ packages/core/src/component-compiler.test.ts | 99 +++++++++++++++++++ packages/core/src/component-compiler.ts | 36 +++++-- packages/core/src/component-spec.d.ts | 5 +- packages/core/src/component-spec.ts | 93 ++++++++++++++--- packages/core/src/css-safety.d.ts | 5 + packages/core/src/css-safety.ts | 72 ++++++++++++++ packages/core/src/index.d.ts | 3 +- packages/core/src/index.ts | 1 + packages/tokens/src/create-theme.test.ts | 16 +++ packages/tokens/src/emit-css.ts | 25 +++-- src/lib/dk/cli.test.ts | 39 ++++++++ src/lib/dk/cms-cli.ts | 5 +- src/lib/dk/future.test.ts | 19 ++++ src/lib/dk/future.ts | 10 +- 24 files changed, 510 insertions(+), 44 deletions(-) create mode 100644 packages/components/src/lib/shared/recipe.test.ts create mode 100644 packages/components/src/lib/shared/url.ts create mode 100644 packages/core/src/component-compiler.test.ts create mode 100644 packages/core/src/css-safety.d.ts create mode 100644 packages/core/src/css-safety.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c05ceab..b20fa40 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,7 +78,7 @@ jobs: fi - name: Create release PR or publish via Changesets if: steps.release-mode.outputs.mode == 'changesets' - uses: changesets/action@v1 + uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf with: version: pnpm changeset:version publish: pnpm -r publish --access public --provenance diff --git a/packages/components/src/lib/breadcrumbs/Breadcrumbs.svelte b/packages/components/src/lib/breadcrumbs/Breadcrumbs.svelte index 9dae685..97cc381 100644 --- a/packages/components/src/lib/breadcrumbs/Breadcrumbs.svelte +++ b/packages/components/src/lib/breadcrumbs/Breadcrumbs.svelte @@ -15,6 +15,7 @@ getBreadcrumbsRecipeCase, serializeBreadcrumbsSlotStyles } from './breadcrumbs.recipe.js'; + import { sanitizeHref } from '../shared/url.js'; import type { BreadcrumbsSize } from './breadcrumbs.spec.js'; export let items: BreadcrumbItem[] = []; @@ -40,11 +41,12 @@
    {#each items as item, index (item.label + index)} {@const current = index === resolvedCurrentIndex} + {@const safeHref = sanitizeHref(item.href)}