Skip to content

Revert "Merge pull request #565" (re-merge as fresh PR) - #566

Merged
jackgranatowski merged 1 commit into
mainfrom
claude/revert-565-remerge
Jul 8, 2026
Merged

Revert "Merge pull request #565" (re-merge as fresh PR)#566
jackgranatowski merged 1 commit into
mainfrom
claude/revert-565-remerge

Conversation

@jackgranatowski

Copy link
Copy Markdown
Contributor

Temporarily reverts the changes from #565 out of main.

Background: #565's web merge succeeded at the git level (merge commit 40d352f) but the request errored before GitHub could update the PR status, leaving #565 stuck as "Closed" — GitHub refuses to reopen it ("commits are already merged") and won't show a "Merged" badge.

This revert removes #565's changes so they can be re-introduced through a fresh, cleanly-mergeable PR that lands in history with a proper "Merged" badge. Net effect on the codebase is zero once the follow-up re-add PR is merged.


Generated by Claude Code

…ty-audit-dlbw5f"

This reverts commit 40d352f, reversing
changes made to feda6d0.
@jackgranatowski
jackgranatowski merged commit 4831518 into main Jul 8, 2026
9 of 10 checks passed
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jackgranatowski, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 55 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 73540ae0-0663-449c-8a04-2d2cf26e6f4b

📥 Commits

Reviewing files that changed from the base of the PR and between 40d352f and 9445ffa.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (18)
  • CLAUDE.md
  • analysis/gap-analysis.md
  • demos/full-api-demo-with-overrides.html
  • demos/full-api-demo.html
  • demos/ultimate-override.css
  • optional/components.css
  • package.json
  • reports/full-api-audit/REPORT.md
  • scripts/artifacts.json
  • scripts/check-artifacts.js
  • scripts/gen-class-reference.js
  • scripts/lib/api-index/extract.js
  • scripts/lib/parse.js
  • tests/configurator-data-contract.test.js
  • tests/supports-helpers.js
  • tests/supports-helpers.test.js
  • tests/tier1-p2-coverage.test.js
  • tests/tier1-p7-oldengine.test.js
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/revert-565-remerge

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Revert merged #565 to re-land as a fresh PR

⚙️ Configuration changes 🧪 Tests 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Reverts the code and doc changes introduced by merged commit #565.
• Rolls back artifact checks, CSS gating tests, and demo/report version strings.
• Prepares main for a clean follow-up PR that re-introduces #565 with a proper merge badge.
Diagram

graph TD
  A["This PR (revert #565)"] --> B["Docs & reports"] --> C["Demo/version strings"]
  A --> D["Build scripts"] --> E["Artifact freshness gate"]
  A --> F["CSS sources"] --> G["Tier1 gating tests"]
  D --> H["package.json devDeps"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Leave #565 as-is and document the GitHub badge issue
  • ➕ Zero code churn; avoids temporary regression risk from reverting safeguards/tests.
  • ➕ No disruption to main-branch behavior while waiting on GitHub UI/state resolution.
  • ➖ Does not produce a canonical “Merged” badge/merged-state PR record.
  • ➖ Future archaeology remains confusing (merged commit exists, PR looks unmerged).
2. Ask GitHub Support to repair PR state (mark merged)
  • ➕ Avoids revert/re-merge churn entirely.
  • ➕ Preserves commit history and avoids temporarily removing checks/tests.
  • ➖ May be slow/unreliable; not always possible for support to change PR state.
  • ➖ Blocks work until external resolution; outcome uncertain.
3. Create a follow-up PR that only reverts the revert (no intermediate time on main)

Recommendation: Given the explicit goal (get a clean PR record with a proper “Merged” badge) and GitHub refusing to reopen/mark #565 merged, the revert-then-reintroduce approach is pragmatic and controllable. If timing allows, merging the re-add PR immediately after this one reduces the window where main temporarily loses #565’s safeguards/tests.

Files changed (15) +101 / -179

Refactor (4) +34 / -74
components.cssUndo @supports gating around color-mix hover tints +3/-13

Undo @supports gating around color-mix hover tints

• Moves 'color-mix()' hover backgrounds for secondary/ghost buttons out of an '@supports' gate. This restores the pre-#565 behavior where these declarations are always present.

optional/components.css

gen-class-reference.jsInline CSS parsing and add per-file metadata (title/prefix) +24/-32

Inline CSS parsing and add per-file metadata (title/prefix)

• Replaces shared parse helpers with local comment/string stripping and direct filesystem reads. Consolidates file title + class prefix into a single metadata map used when building source sections.

scripts/gen-class-reference.js

extract.jsRemove FILE_META lookup guard helper +2/-20

Remove FILE_META lookup guard helper

• Deletes 'metaFor()' (the explicit error on missing FILE_META entries) and switches call sites to direct 'FILE_META[rel]' access. Missing metadata now fails via downstream undefined access rather than a custom error.

scripts/lib/api-index/extract.js

parse.jsSimplify string-literal handling in strip/mask helpers +5/-9

Simplify string-literal handling in strip/mask helpers

• Updates 'stripStrings'/'maskStrings' to use simpler quote-matching regexes and shortens the module header comment. This reverts escape-aware behavior in the string matching patterns.

scripts/lib/parse.js

Tests (2) +54 / -48
tier1-p2-coverage.test.jsNarrow P2 gating coverage to tokens.css with a simple scanner +27/-32

Narrow P2 gating coverage to tokens.css with a simple scanner

• Removes the shared helpers-based scan across all core/optional CSS files. Replaces it with two line-based checks that only ensure modern expressions in 'core/tokens.css' are inside '@supports' blocks.

tests/tier1-p2-coverage.test.js

tier1-p7-oldengine.test.jsInline a simplified @supports stripper and drop whole-bundle scan +27/-16

Inline a simplified @supports stripper and drop whole-bundle scan

• Replaces imports from the deleted shared helpers with an inline, line/brace-depth-based 'stripSupports()' implementation. Removes the test that scanned all bundle declarations for ungated modern expressions (keeping the existing custom-property-focused checks).

tests/tier1-p7-oldengine.test.js

Documentation (6) +12 / -32
CLAUDE.mdRevert expanded version-sync guidance table +9/-13

Revert expanded version-sync guidance table

• Collapses the version-sync table back to a simple File/Field listing. Removes explanatory notes about build-derived version stamping and CI enforcement details.

CLAUDE.md

gap-analysis.mdRemove historical-status header comment +0/-5

Remove historical-status header comment

• Deletes the top-of-file HTML comment describing the document as a non-living snapshot. Leaves the main gap analysis content unchanged.

analysis/gap-analysis.md

full-api-demo-with-overrides.htmlRevert demo version banner string +1/-1

Revert demo version banner string

• Updates the displayed framework version in the demo header line from v0.7.3 back to v0.7.0.

demos/full-api-demo-with-overrides.html

full-api-demo.htmlRevert demo version banner string +1/-1

Revert demo version banner string

• Updates the displayed framework version in the demo header line from v0.7.3 back to v0.7.0.

demos/full-api-demo.html

ultimate-override.cssRevert generated override header version stamp +1/-1

Revert generated override header version stamp

• Changes the generated-file header comment version from SLASHED v0.7.3 back to SLASHED v0.7.0.

demos/ultimate-override.css

REPORT.mdRemove audit harness ownership/status header comment +0/-11

Remove audit harness ownership/status header comment

• Deletes the leading HTML comment block describing how the audit harness is run and how snapshots are consumed by tests.

reports/full-api-audit/REPORT.md

Other (3) +1 / -25
package.jsonAdd lightningcss dev dependency +1/-0

Add lightningcss dev dependency

• Adds 'lightningcss' to devDependencies, restoring tooling dependency state from the reverted merge.

package.json

artifacts.jsonRoll back declared artifacts for configurator classes and full-api demos +0/-12

Roll back declared artifacts for configurator classes and full-api demos

• Removes 'configurator/src/data/classes.generated.json' from tracked artifact outputs. Removes the entire artifact entry that declared the full-api demos as generated outputs.

scripts/artifacts.json

check-artifacts.jsRemove failure on untracked declared artifact outputs +0/-13

Remove failure on untracked declared artifact outputs

• Deletes the guard that errored when an artifacts.json output path was not git-tracked. The freshness check now only relies on 'git diff' results for declared outputs.

scripts/check-artifacts.js

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 12 rules

Grey Divider


Action required

1. Ungated color-mix hover 🐞 Bug ≡ Correctness
Description
optional/components.css now uses color-mix() directly in hover backgrounds without an
@supports gate, so engines without color-mix() will ignore the hover background tint for
.sf-btn--secondary/.sf-btn--ghost. The updated P2/P7 tests no longer cover non-token
declarations, so this regression is unlikely to be caught by CI.
Code

optional/components.css[R113-117]

  .sf-btn--secondary:hover:not(:disabled, .sf-is-disabled, .sf-is-loading) {
+    background:   color-mix(in oklab, var(--sf-btn-color) 8%, transparent);
    border-color: var(--sf-btn-color);
  }
Relevance

⭐⭐⭐ High

Repo enforces @supports gating for modern color functions; PR #567 explicitly fixed ungated
color-mix in components.css.

PR-#567
PR-#254

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The hover backgrounds now contain color-mix() with no @supports wrapper, and the tests were
changed to only scan core/tokens.css (P2) and only scan --sf-* custom properties (P7), so these
ungated component declarations are no longer covered.

optional/components.css[107-125]
tests/tier1-p2-coverage.test.js[1-43]
tests/tier1-p7-oldengine.test.js[50-56]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`optional/components.css` contains `background: color-mix(...)` in normal rules (not inside `@supports`). Browsers lacking `color-mix()` support will drop the `background` hover tint, and the current P2/P7 tests won't detect this because they no longer scan ordinary declarations.

### Issue Context
This used to be gated via `@supports (background: color-mix(in oklab, red, red)) { ... }` so older engines would skip only the modern tint while retaining other hover cues.

### Fix Focus Areas
- optional/components.css[113-125]
- tests/tier1-p2-coverage.test.js[1-43]
- tests/tier1-p7-oldengine.test.js[50-56]

### Proposed fix
1. Wrap the `background: color-mix(...)` hover declarations for `.sf-btn--secondary:hover...` and `.sf-btn--ghost:hover...` in an `@supports (background: color-mix(in oklab, red, red)) { ... }` block.
2. Re-expand the gating tests to include component/utility rules again (either by reinstating the previous whole-source scan or adding a targeted scan for non-custom-property declarations in `optional/components.css`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Broken @supports stripper 🐞 Bug ☼ Reliability
Description
The new stripSupports() in tests/tier1-p7-oldengine.test.js counts braces without understanding
@supports preludes that themselves contain braces (e.g. `@supports (@property --x { ... }) { ...
}`), so it can stop stripping too early and leak gated declarations into the “ungated” corpus. This
makes the P7 old-engine invariant check unreliable and can produce false failures or missed
regressions.
Code

tests/tier1-p7-oldengine.test.js[R23-48]

+/**
+ * Simulate an engine with no @supports by stripping all @supports blocks.
+ * Returns only declarations that survive (ungated ones).
+ */
+function stripSupports(css) {
+  let result = '';
+  let depth = 0;
+  let inSupports = false;
+  let supportsDepth = 0;
+  for (const line of css.split('\n')) {
+    const trimmed = line.trim();
+    if (trimmed.startsWith('@supports')) {
+      inSupports = true;
+      supportsDepth = depth;
+    }
+    if (!inSupports) result += line + '\n';
+    for (const ch of line) {
+      if (ch === '{') depth++;
+      else if (ch === '}') {
+        depth--;
+        if (inSupports && depth <= supportsDepth) inSupports = false;
+      }
+    }
+  }
+  return result;
+}
Relevance

⭐⭐⭐ High

They previously replaced fragile stripSupports with robust helper + tests; PR #567 added
supports-helpers to avoid prelude-brace bugs.

PR-#567
PR-#254

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
core/motion.css contains an @supports prelude with braces (@property --x { ... }). The new
stripSupports() decrements depth on the prelude's } and can clear inSupports before reaching
the supports body, causing the gated oklch(from ...) custom-property declaration to be included in
the ungated set.

tests/tier1-p7-oldengine.test.js[23-48]
core/motion.css[127-139]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`tests/tier1-p7-oldengine.test.js` replaced the prior robust `@supports` removal logic with a brace counter that doesn't handle braces inside `@supports` preludes (notably the `@property` feature-query form). This can terminate `inSupports` before the actual supports-body begins.

### Issue Context
The codebase contains exactly this pattern in `core/motion.css`:
`@supports (@property --x { ... }) { ... }`
Inside that gated block there are `--sf-*` custom-property declarations using `oklch(from ...)`, so a broken stripper will incorrectly treat those as ungated.

### Fix Focus Areas
- tests/tier1-p7-oldengine.test.js[23-48]
- core/motion.css[127-139]

### Proposed fix
1. Restore the previous proven implementation (the one that was in `tests/supports-helpers.js`) or re-implement it in-place:
  - strip comments first
  - skip over string literals (honour backslash escapes)
  - when encountering `@supports` at a token boundary, find the body-opening `{` at paren depth 0
  - then walk to the matching closing `}` (nested at-rules allowed)
2. Add back unit tests for tricky cases (braces in prelude, braces/parens in strings) so regressions are caught immediately.
3. (Optional) If you keep a local implementation, document why it must be prelude/paren-aware.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Artifacts gate misses classes 🐞 Bug ☼ Reliability
Description
scripts/artifacts.json no longer declares configurator/src/data/classes.generated.json as an
output artifact even though the configurator imports it, so scripts/check-artifacts.js --check
will not fail CI when it drifts. This can ship a configurator whose class cheatsheet is out of sync
with the framework sources/docs pipeline.
Code

scripts/artifacts.json[R13-18]

      "token-registry.json",
      "dist/css-custom-data.json",
      "configurator/src/data/api-index.generated.json",
-      "configurator/src/data/classes.generated.json",
      "configurator/src/data/bundles.generated.json",
      "configurator/src/data/token-registry.generated.json"
    ]
Relevance

⭐⭐⭐ High

Artifacts freshness is a maintained CI gate; PR #211 introduced it and PR #567 tracked generated
outputs tightly.

PR-#211
PR-#567

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The configurator imports and uses classes.generated.json, and the sync script explicitly generates
it, but the artifact list no longer includes it; since check-artifacts only diffs declared
outputs, this file can drift without CI failing.

scripts/artifacts.json[1-29]
scripts/check-artifacts.js[51-69]
configurator/scripts/sync-api.mjs[47-51]
configurator/src/components/panels/CheatsheetPanel.svelte[5-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The artifact freshness gate only checks files listed in `scripts/artifacts.json`. This PR removes `configurator/src/data/classes.generated.json` from those outputs, but the configurator still imports and relies on it.

### Issue Context
- `npm run docs` runs `npm run configurator:sync`, which generates `classes.generated.json`.
- The configurator UI imports `classes.generated.json` directly.
- `scripts/check-artifacts.js` only runs `git diff --exit-code` on declared `outputs`, so omitted generated files can drift silently.

### Fix Focus Areas
- scripts/artifacts.json[1-29]
- scripts/check-artifacts.js[51-69]
- configurator/scripts/sync-api.mjs[47-51]
- configurator/src/components/panels/CheatsheetPanel.svelte[5-13]

### Proposed fix
1. Add `configurator/src/data/classes.generated.json` back into the `outputs` array(s) for the relevant artifact entries (at least the ones that run `npm run docs` / `configurator:sync`).
2. (Recommended) Restore the check-mode guard that fails if an artifact output is not git-tracked, to prevent un-checkable outputs from being added in the future.
3. (Optional) Consider reintroducing a lightweight contract test for generated configurator data if downstream consumers are sensitive to shape changes.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

4. Demo version string stale 🐞 Bug ⚙ Maintainability
Description
The full-api demo pages now display v0.7.0 while package.json declares version 0.7.3, so the
demo UI reports an incorrect framework version. This undermines the demos as a smoke-test surface
and can mislead release verification.
Code

demos/full-api-demo.html[R124-125]

+    <p style="color:var(--sf-color-text--muted)">v0.7.0 · optimal-components bundle from jsDelivr CDN · 324 classes · 729 tokens (238 configurable)</p>
    <div class="notice">Baseline render with default tokens. Use the toolbar to switch theme, toggle the ultimate override live, or replay motion. The always-on override variant is <a href="full-api-demo-with-overrides.html">full-api-demo-with-overrides.html</a>.</div>
Relevance

⭐⭐⭐ High

Team frequently fixes demo drift; PR #560 synced demos, and generator uses VERSION (PR #456).

PR-#560
PR-#456

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The demo HTML explicitly shows v0.7.0, but the package version in package.json is 0.7.3, so
the demo banner is inconsistent with the repo’s declared version.

demos/full-api-demo.html[121-125]
package.json[1-6]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Demo assets hard-code a version string that no longer matches `package.json`.

### Issue Context
`package.json` is the version source-of-truth for most repo artifacts. The demo banner should align with it (ideally generated, not hand-edited).

### Fix Focus Areas
- demos/full-api-demo.html[121-125]
- package.json[1-6]
- scripts/artifacts.json[1-29]

### Proposed fix
1. Update/regenerate the demo assets so the displayed version matches `package.json` (e.g., rerun the demo generator if available).
2. If these demos are intended to be kept in sync automatically, re-add them to `scripts/artifacts.json` so `check-artifacts` enforces freshness.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment thread optional/components.css
Comment on lines 113 to 117
.sf-btn--secondary:hover:not(:disabled, .sf-is-disabled, .sf-is-loading) {
background: color-mix(in oklab, var(--sf-btn-color) 8%, transparent);
border-color: var(--sf-btn-color);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Ungated color-mix hover 🐞 Bug ≡ Correctness

optional/components.css now uses color-mix() directly in hover backgrounds without an
@supports gate, so engines without color-mix() will ignore the hover background tint for
.sf-btn--secondary/.sf-btn--ghost. The updated P2/P7 tests no longer cover non-token
declarations, so this regression is unlikely to be caught by CI.
Agent Prompt
### Issue description
`optional/components.css` contains `background: color-mix(...)` in normal rules (not inside `@supports`). Browsers lacking `color-mix()` support will drop the `background` hover tint, and the current P2/P7 tests won't detect this because they no longer scan ordinary declarations.

### Issue Context
This used to be gated via `@supports (background: color-mix(in oklab, red, red)) { ... }` so older engines would skip only the modern tint while retaining other hover cues.

### Fix Focus Areas
- optional/components.css[113-125]
- tests/tier1-p2-coverage.test.js[1-43]
- tests/tier1-p7-oldengine.test.js[50-56]

### Proposed fix
1. Wrap the `background: color-mix(...)` hover declarations for `.sf-btn--secondary:hover...` and `.sf-btn--ghost:hover...` in an `@supports (background: color-mix(in oklab, red, red)) { ... }` block.
2. Re-expand the gating tests to include component/utility rules again (either by reinstating the previous whole-source scan or adding a targeted scan for non-custom-property declarations in `optional/components.css`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +23 to +48
/**
* Simulate an engine with no @supports by stripping all @supports blocks.
* Returns only declarations that survive (ungated ones).
*/
function stripSupports(css) {
let result = '';
let depth = 0;
let inSupports = false;
let supportsDepth = 0;
for (const line of css.split('\n')) {
const trimmed = line.trim();
if (trimmed.startsWith('@supports')) {
inSupports = true;
supportsDepth = depth;
}
if (!inSupports) result += line + '\n';
for (const ch of line) {
if (ch === '{') depth++;
else if (ch === '}') {
depth--;
if (inSupports && depth <= supportsDepth) inSupports = false;
}
}
}
return result;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Broken @supports stripper 🐞 Bug ☼ Reliability

The new stripSupports() in tests/tier1-p7-oldengine.test.js counts braces without understanding
@supports preludes that themselves contain braces (e.g. `@supports (@property --x { ... }) { ...
}`), so it can stop stripping too early and leak gated declarations into the “ungated” corpus. This
makes the P7 old-engine invariant check unreliable and can produce false failures or missed
regressions.
Agent Prompt
### Issue description
`tests/tier1-p7-oldengine.test.js` replaced the prior robust `@supports` removal logic with a brace counter that doesn't handle braces inside `@supports` preludes (notably the `@property` feature-query form). This can terminate `inSupports` before the actual supports-body begins.

### Issue Context
The codebase contains exactly this pattern in `core/motion.css`:
`@supports (@property --x { ... }) { ... }`
Inside that gated block there are `--sf-*` custom-property declarations using `oklch(from ...)`, so a broken stripper will incorrectly treat those as ungated.

### Fix Focus Areas
- tests/tier1-p7-oldengine.test.js[23-48]
- core/motion.css[127-139]

### Proposed fix
1. Restore the previous proven implementation (the one that was in `tests/supports-helpers.js`) or re-implement it in-place:
   - strip comments first
   - skip over string literals (honour backslash escapes)
   - when encountering `@supports` at a token boundary, find the body-opening `{` at paren depth 0
   - then walk to the matching closing `}` (nested at-rules allowed)
2. Add back unit tests for tricky cases (braces in prelude, braces/parens in strings) so regressions are caught immediately.
3. (Optional) If you keep a local implementation, document why it must be prelude/paren-aware.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread scripts/artifacts.json
Comment on lines 13 to 18
"token-registry.json",
"dist/css-custom-data.json",
"configurator/src/data/api-index.generated.json",
"configurator/src/data/classes.generated.json",
"configurator/src/data/bundles.generated.json",
"configurator/src/data/token-registry.generated.json"
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

3. Artifacts gate misses classes 🐞 Bug ☼ Reliability

scripts/artifacts.json no longer declares configurator/src/data/classes.generated.json as an
output artifact even though the configurator imports it, so scripts/check-artifacts.js --check
will not fail CI when it drifts. This can ship a configurator whose class cheatsheet is out of sync
with the framework sources/docs pipeline.
Agent Prompt
### Issue description
The artifact freshness gate only checks files listed in `scripts/artifacts.json`. This PR removes `configurator/src/data/classes.generated.json` from those outputs, but the configurator still imports and relies on it.

### Issue Context
- `npm run docs` runs `npm run configurator:sync`, which generates `classes.generated.json`.
- The configurator UI imports `classes.generated.json` directly.
- `scripts/check-artifacts.js` only runs `git diff --exit-code` on declared `outputs`, so omitted generated files can drift silently.

### Fix Focus Areas
- scripts/artifacts.json[1-29]
- scripts/check-artifacts.js[51-69]
- configurator/scripts/sync-api.mjs[47-51]
- configurator/src/components/panels/CheatsheetPanel.svelte[5-13]

### Proposed fix
1. Add `configurator/src/data/classes.generated.json` back into the `outputs` array(s) for the relevant artifact entries (at least the ones that run `npm run docs` / `configurator:sync`).
2. (Recommended) Restore the check-mode guard that fails if an artifact output is not git-tracked, to prevent un-checkable outputs from being added in the future.
3. (Optional) Consider reintroducing a lightweight contract test for generated configurator data if downstream consumers are sensitive to shape changes.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread demos/full-api-demo.html
Comment on lines +124 to 125
<p style="color:var(--sf-color-text--muted)">v0.7.0 · optimal-components bundle from jsDelivr CDN · 324 classes · 729 tokens (238 configurable)</p>
<div class="notice">Baseline render with default tokens. Use the toolbar to switch theme, toggle the ultimate override live, or replay motion. The always-on override variant is <a href="full-api-demo-with-overrides.html">full-api-demo-with-overrides.html</a>.</div>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

4. Demo version string stale 🐞 Bug ⚙ Maintainability

The full-api demo pages now display v0.7.0 while package.json declares version 0.7.3, so the
demo UI reports an incorrect framework version. This undermines the demos as a smoke-test surface
and can mislead release verification.
Agent Prompt
### Issue description
Demo assets hard-code a version string that no longer matches `package.json`.

### Issue Context
`package.json` is the version source-of-truth for most repo artifacts. The demo banner should align with it (ideally generated, not hand-edited).

### Fix Focus Areas
- demos/full-api-demo.html[121-125]
- package.json[1-6]
- scripts/artifacts.json[1-29]

### Proposed fix
1. Update/regenerate the demo assets so the displayed version matches `package.json` (e.g., rerun the demo generator if available).
2. If these demos are intended to be kept in sync automatically, re-add them to `scripts/artifacts.json` so `check-artifacts` enforces freshness.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants