Commit Graph
1403 Commits
Author SHA1 Message Date
github-actions[bot] 731cd2e6cd Sync generated provider output 2026-08-03 21:54:17 +00:00
Abdul WahabandGitHub b33feacbe9 Fix: unescape YAML quote escapes in DESIGN.md frontmatter scalars (#473)
* Fix: unescape YAML quote escapes in DESIGN.md frontmatter scalars (#428)

parseScalar() stripped a double-quoted scalar's outer quotes without
processing the backslash escapes inside, so a font stack that quotes a
multi-word family the CSS way, e.g.

  fontFamily: "\"IBM Plex Sans\", system-ui, sans-serif"

reached allowedFonts as '\"ibm plex sans' and design-system-font flagged
fonts DESIGN.md declares. Also collapses the doubled-quote escape in
single-quoted scalars and keeps a lone quote literal instead of slicing
it to an empty string. Applied to both copies of the parser
(cli/engine/design-system.mjs and skill/scripts/lib/design-parser.mjs).

Co-authored-by: Cursor Agent (AI-assisted change, reviewed and directed
by a maintainer)

* Decode YAML hex and Unicode escapes in double-quoted scalars

Review follow-up: the escape scanner only handled the simple set, so
\xNN, \uNNNN, and \UNNNNNNNN sequences stayed encoded and an escaped
token like "\x23b8422e" never matched #b8422e in CSS. Decode validated
hex escapes in both parser copies; malformed or out-of-range sequences
stay literal. Regression coverage for all three forms.

Co-authored-by: Cursor Agent (AI-assisted change, reviewed and directed
by a maintainer)

* Complete the YAML 1.2 double-quote escape set

Review follow-up: the escape map omitted the escaped space (\ ) and
non-breaking space (\_) forms, so fonts declared with them kept a
literal backslash in allowedFonts and their CSS declarations were
reported as undeclared. Map the full spec 5.7 set (\a \b \v \f \e
\N \L \P included) in both parser copies instead of chasing one escape
at a time. Regression coverage for both named forms.

Co-authored-by: Cursor Agent (AI-assisted change, reviewed and directed
by a maintainer)
2026-08-03 14:53:36 -07:00
github-actions[bot] df09de3676 Sync generated provider output 2026-08-03 21:52:56 +00:00
Paul BakausandGitHub de7b72843f Fix broken-image findings in source comments (#490)
* Fix broken-image comment false positives

AI assistance was used to reproduce the issue, implement the fix, and add regression coverage.

* Harden JavaScript comment scanning

AI assistance was used to address automated review feedback, add regression coverage, and run validation.

* Handle comments in template expressions

AI assistance was used to reproduce and fix automated review feedback, add regression coverage, and run validation.

* Preserve JSX around URL and regex syntax

AI assistance was used to reproduce and fix automated review feedback, add regression coverage, and run validation.

* Fix regex keyword property context

AI assistance: Codex identified, implemented, and validated this review follow-up under maintainer authorization.

* Handle JSX slash edge cases

AI assistance: Codex addressed review findings and validated this follow-up under maintainer authorization.

* Ignore CSS-in-JS comments

AI assistance: Codex addressed top-level review findings and validated this follow-up under maintainer authorization.

* Handle remaining slash contexts

Fix JavaScript keyword separation and JSX protocol-relative URL classification so comment stripping preserves only live source. Add focused regressions for the reviewed edge cases.\n\nAI assistance: Codex implemented and validated this change under maintainer authorization.

* Handle generic styled templates

Recognize TypeScript generic arguments consistently in CSS-in-JS extraction and comment sanitization. Add focused regressions for extraction and comment-only styled templates.\n\nAI assistance: Codex implemented and validated this change under maintainer authorization.

* Handle nested styled generics

Teach CSS-in-JS extraction and comment sanitization to scan balanced nested TypeScript generic arguments before template literals. Add regressions for live and commented nested-generic styles.\n\nAI assistance disclosure: Codex implemented and validated this review follow-up under maintainer authorization.

* Handle nested source contexts

Keep regex detection correct after postfix operators, distinguish JSX expression comments from protocol-relative text, and scan nested template literals inside CSS-in-JS interpolations. Add focused regressions for each review finding.\n\nAI assistance disclosure: Codex implemented and validated these review follow-ups under maintainer authorization.

* Complete comment-safe source scanning

Recognize regex literals after for-of, comparisons, and block braces without confusing object-literal division. Route grid-background detection through the offset-preserving comment-neutralized source and add negative and positive controls.\n\nAI assistance disclosure: Codex implemented and validated these review follow-ups under maintainer authorization.

* Handle remaining lexer contexts

Recognize JSX attribute expressions and regex literals inside CSS-in-JS interpolations so comment stripping remains source-safe.\n\nAI-assisted: Codex implemented and validated this change under maintainer authorization.

* Align interpolation regex contexts

Match postfix-update and statement-block regex classification in CSS-in-JS interpolation parsing so templates remain extractable.\n\nAI-assisted: Codex implemented and validated this change under maintainer authorization.
2026-08-03 14:52:23 -07:00
Paul BakausandGitHub d6a9891066 Share browser detector bundling (#498)
Centralize the browser-safe module set and source transformation so the browser and extension builders cannot drift.

AI assistance: This refactor was prepared by Codex under pbakaus's scheduled architecture-simplification authorization.
2026-08-03 14:51:46 -07:00
6d2af3f800 Guard the plugin loader contract that PR #494 exposed (#499)
* test: guard the plugin loader contract that PR #494 exposed

The agents manifest key shipped for months and silently loaded zero of
the four subagents; no validator looked at the generated plugin
manifest's shape and claude plugin validate never checks it. Three
layers now do:

- scripts/lib/validate-plugin-manifest.js pins the verified loader
  contract (KNOWN_LOADER_KEYS allowlist, no agents key, trailing-slash
  skills path from issue #86, every skill/agents/*.md shipped in
  plugin/agents/), unit-tested in tests/validate-plugin-manifest.test.js
  including a check of the real committed subtree.
- The same check gates bun run build next to the version-drift guard.
- tests/plugin-e2e.test.mjs installs the committed ./plugin subtree into
  a real Claude Code (sandboxed via CLAUDE_CONFIG_DIR in a temp dir) and
  asserts the component inventory: skill parses, all agents visible,
  hooks discovered. In the default suite; runs in about a second and
  skips cleanly when the claude CLI is absent, so CI is unaffected.

All three failed against the pre-#494 tree for the shipped reason
(Agents 0 of 4) and pass against current main.

AI-assisted via Claude Code under maintainer direction.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* fix: address PR review bot findings

- Copilot: guard collectPluginManifestFindings against valid JSON that is
  not an object (null, string, number, array) so a broken manifest is a
  finding instead of a build crash; unit test added
- Copilot: update the plugin-e2e header comment, the suite is in the
  default lineup rather than opt-in

AI-assisted via Claude Code under maintainer direction.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* fix: harden plugin E2E sandbox isolation

Bugbot: create the sandbox CLAUDE_CONFIG_DIR up front and redirect HOME
and USERPROFILE into the temp workDir too, so a CLI code path that
derives config or cache locations from the home directory instead of
CLAUDE_CONFIG_DIR still cannot touch the developer's real Claude config
when the default suite runs.

AI-assisted via Claude Code under maintainer direction.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* fix: agent parity check mirrors the build's emit rules

Bugbot: the shipped filename is `${claude-name || name}.md` and a
providers: list may exclude claude-code, so comparing raw source
basenames could fail the build on a renamed or provider-scoped agent
with a build:release hint that cannot fix it. The validator now derives
expected filenames the same way the transformer factory does (shared
parseFrontmatter, same providers gate) with unit coverage for renames,
name overrides, and provider-scoped agents.

AI-assisted via Claude Code under maintainer direction.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* fix: run the plugin E2E through a shell on Windows

Bugbot: the claude CLI is a .cmd shim on Windows and Node refuses to
spawn those via execFile without a shell, so the availability probe
always failed and the suite silently skipped there. Windows now invokes
through a shell with every argument double-quoted (temp paths routinely
contain spaces); the POSIX path is unchanged.

AI-assisted via Claude Code under maintainer direction.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-08-03 13:13:37 -07:00
github-actions[bot] 69b63d36b6 Sync generated provider output 2026-08-03 18:55:47 +00:00
ingnicolaboccato-labandGitHub baa76cfd05 fix: stop emitting the "agents" key so the four subagents actually load (#494)
build.js derives plugin/.claude-plugin/plugin.json from the root manifest and
injects an `agents` array built from the generated agent files. In Claude Code
that array is exactly what stops them loading.

Verified on a throwaway local marketplace, across the plausible shapes:

  array of file paths (what build.js emits) -> 0 agents load, skills fine
  a string, e.g. "./agents"                 -> whole plugin fails to load
  array containing a directory              -> whole plugin fails to load
  key omitted                               -> all agents load, skills fine

Claude Code discovers agents/*.md on its own, and the identifier it uses is the
file name rather than the frontmatter `name`. So the key is not needed, and any
present form of it is worse than its absence.

Confirmed end to end on this repo: with the key emitted,
`claude plugin details impeccable` reports "Agents (0)"; with it omitted it
reports "Agents (4) impeccable-asset-producer, impeccable-documenter,
impeccable-finish-reviewer, impeccable-manual-edit-applier". The agent files
themselves are still copied by the existing copyDirSync a few lines below —
only the manifest key goes away.

Two things make this hard to notice: with a breaking shape
`claude plugin details` prints "Plugin not found" instead of a validation
error, and `claude plugin validate` does not catch it because it validates the
marketplace manifest, not the plugin manifest. The only reliable signal is the
"Agents (N)" line.

The same defect is reported against another project at
addyosmani/agent-skills#449, with the full reproduction.

Scope note: verified on Claude Code only. plugin/ is the Claude-Code / Grok
subtree, and the Grok manifest is written separately just below, so this does
not touch the other harnesses.
2026-08-03 11:55:14 -07:00
github-actions[bot] 71ccba9f5b Sync generated provider output 2026-08-03 17:55:14 +00:00
Paul BakausandGitHub d69bd093f9 Merge pull request #491 from pbakaus/codex/issue-485-ignore-file-flags
Honor scope flags for ignore-file
2026-08-03 10:54:43 -07:00
dependabot[bot]andGitHub 5dfeba6d3e Bump @babel/parser to 8.0.4 and raise Node floor (#430)
Upgrade @babel/parser from 7.29.7 to 8.0.4 and raise the repository Node 22 minimum from 22.12.0 to 22.18.0 across package metadata, CI, and npm documentation.

No parser API migration was required. Validated with the full local suite and refreshed GitHub CI on Node 22.18.0 and Node 24.

Prepared and validated with AI assistance from OpenAI Codex under maintainer instructions.
2026-08-03 10:46:55 -07:00
Paul Bakaus 2345868c7b Preserve detector extension mappings
Keep unmanaged detector fields when ignore-file updates the canonical detector configuration. Add a regression covering existing extension mappings.\n\nAI assistance: Codex implemented and validated this change under maintainer authorization.
2026-08-03 10:42:07 -07:00
Paul Bakaus 57ce11288f Preserve detector extensions
AI assistance: Codex addressed review feedback and validated this follow-up under maintainer authorization.
2026-08-03 10:23:13 -07:00
dependabot[bot]andGitHub 707794c597 Bump the bun-minor-and-patch group with 5 updates (#489)
Update the coordinated Vercel AI SDK stack and Playwright to their latest compatible patch releases.

Prepared and validated with AI assistance from OpenAI Codex under maintainer automation instructions.
2026-08-03 10:06:25 -07:00
Paul Bakaus ae118ebf57 Migrate legacy advisory settings
AI assistance: Codex identified, implemented, and validated this review follow-up under maintainer authorization.
2026-08-03 10:05:05 -07:00
Paul Bakaus 3125864d1a Preserve advisory detector settings
AI assistance was used to reproduce and fix automated review feedback, add regression coverage, and run validation.
2026-08-03 09:38:02 -07:00
Paul Bakaus dd0279b6bd Document ignore-file scope flags
AI assistance was used to address automated review feedback and validate the documentation correction.
2026-08-03 09:21:13 -07:00
Paul Bakaus b32a02d02f Fix ignore-file flag handling
AI assistance was used to reproduce the issue, implement the fix, and add regression coverage.
2026-08-03 09:17:23 -07:00
github-actions[bot] 9529f07840 Sync generated provider output 2026-08-03 15:26:39 +00:00
Paul BakausandGitHub ad30c67dca Merge pull request #487 from pbakaus/fix/475-drop-craft-from-hint
Drop deprecated craft alias from the generated argument-hint
2026-08-03 08:26:01 -07:00
Abdul WahabandCursor 7d6109b723 Drop deprecated craft alias from the generated argument-hint
craft is a deprecated compatibility alias, but its SKILL_CATEGORIES entry
kept it advertised in every generated SKILL.md argument-hint. Unmapping it
removes it from the hint while the alias keeps routing through the router
table and command-metadata.json.

AI-assisted change (reviewed by maintainer).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 10:36:18 +05:00
github-actions[bot] 33b9a3752b Sync generated provider output 2026-08-03 03:09:47 +00:00
Paul BakausandGitHub bc51310dad Merge pull request #484 from pbakaus/codex/simplify-import-graph
Simplify import graph scanning
2026-08-02 20:09:15 -07:00
github-actions[bot] 0c9ce16248 Sync generated provider output 2026-08-03 03:08:14 +00:00
Paul BakausandGitHub ae2be34fdc Merge pull request #471 from pbakaus/hook-skip-outside-project
fix: skip design-hook scans for files outside the resolved project root
2026-08-02 20:07:31 -07:00
github-actions[bot] 8cf362b6fe Sync generated provider output 2026-08-03 02:57:12 +00:00
Paul BakausandClaude Fable 5 bcfb7efc46 The comp is king: phased reproduction doctrine
Phase one is near-pixel-perfect reproduction at the comp's breakpoint,
with exactly three concessions (closest font, icons unless a library
was chosen, genuine comp defects); the overlap comparison is the
authority because models systematically believe their code recreation
succeeded when it did not, and regions that keep losing the comparison
ship as composited rendered assets instead. Phase two brings the
reproduction to life (interaction, motion, responsiveness), and
anything beyond the comp inherits the recorded system, never invented
container chrome.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 19:56:39 -07:00
Paul BakausandClaude Code 62a2026afc perf: memoize canonicalPath so scan loops resolve the project root once
The containment gate re-canonicalized projectCwd for every target file
in the per-edit and Stop loops. The hook runs as a fresh process per
tool event, so a module-level memo makes it once-per-event work; the
size cap only matters to long-lived importers like the test runner.

Addresses Copilot review feedback on PR #471.

Written with AI assistance (Claude Code).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-08-02 19:27:13 -07:00
Paul Bakaus c90faaab55 Simplify import graph scanning
Replace three duplicate matcher loops with one declarative pattern list while preserving import resolution behavior. Add Sass @use and @forward characterization coverage.\n\nAI-assisted change prepared under pbakaus's scheduled architecture-refactor authorization.
2026-08-02 11:10:33 -07:00
Paul BakausandClaude Code febce52e8d refactor: share the containment gate with hook-before-edit
hook-before-edit.mjs kept its own string-based isInsideProject; it now
uses the shared isScanTargetInsideProject so all three hook passes
apply one containment semantic, symlink canonicalization included.

Because the before-edit hook gates proposed Writes whose target does
not exist yet, canonicalPath now resolves the nearest existing
ancestor and re-appends the remainder instead of falling back to the
raw resolved path — a new file under a symlinked root compares equal
to its canonical project.

Written with AI assistance (Claude Code).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-31 18:30:50 -07:00
Paul BakausandGitHub c5e1ddd054 Merge pull request #470 from pbakaus/fix/live-cors-nonlocal-dev-hosts
Fix live mode on non-localhost dev hosts (ddev, Valet): authorize CORS by session token
2026-07-31 18:24:42 -07:00
Paul BakausandClaude Code ae03e9e09c fix: skip design-hook scans for files outside the resolved project root
The per-edit and Stop deep passes gated on sensitive paths, generated
paths, extension, config ignores, and size, but never on containment.
Any file the session touched outside the project (harness scratchpad
dirs under the system temp root, sibling checkouts) was scanned and
judged against THIS project's config and DESIGN.md palette, producing
design-system findings that are wrong by construction.

Both loops now check isScanTargetInsideProject() (audit reason:
outside-project), matching the gate hook-before-edit.mjs already had.
Paths are canonicalized so a symlinked root doesn't split the
comparison. The Stop pass re-checks containment itself because caches
written by older hook versions can still list out-of-project paths.
Umbrella-dir launches (issue #305) are unaffected: their projectCwd
resolves to the edited file's own project root, so containment holds.

Written with AI assistance (Claude Code).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-07-31 18:20:09 -07:00
Paul BakausandClaude Fable 5 60c860f022 Pin the token expression in the manual-edit-stash source assertion
Review follow-up: the regex stopped at the literal ?token= and tolerated
anything after it, so removing the encoded token value from the URL
still passed. Requiring encodeURIComponent(TOKEN) right after the
prefix makes the mutation fail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:13:27 -07:00
Paul BakausandClaude Fable 5 675656c18c Assert Vary: Origin on the authorized CORS preflight too
Review follow-up: the reflected-origin contract matters most on the
OPTIONS preflight, where a cached response authorized for one origin
must never be served to another.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:06:55 -07:00
Paul BakausandClaude Fable 5 0f80c1f5aa Add regression tests for token-authorized CORS on non-localhost dev hosts
Covers the fix for the ddev breakage reported in #304: the live server
now reflects Access-Control-Allow-Origin for any request bearing the
valid session token, so dev servers on loopback aliases (https://*.ddev.site,
Valet's *.test, hosts-file entries) work again while tokenless remote
origins stay blocked. The server/browser source changes shipped in
b1c5707f; this adds the test coverage that was written alongside them:

- tokenless remote origins get no ACAO on any route, token'd or not
- a non-loopback origin with the valid token is reflected, with
  Vary: Origin, on both the real request and its OPTIONS preflight
- the /manual-edit-stash source assertion tracks the token-bearing URL

Prepared with AI assistance.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:02:54 -07:00
github-actions[bot] f2f73edb33 Sync generated provider output 2026-08-01 00:55:29 +00:00
Paul BakausandClaude Fable 5 b1c5707fde Cross-harness, cross-OS: boot-time tool detection and native-first image gen
context.mjs now probes cwebp/sips/magick/ffmpeg once (which/where per
OS) and prints IMAGE_TOOLS, replacing macOS-specific prose; the
IMAGE_GEN_AVAILABLE directive leads with the harness-native tool so a
present OpenAI key stops reading as an instruction to bill it; and the
sandboxed board-start guidance sheds codex vocabulary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 17:54:55 -07:00
github-actions[bot] af56fae571 Sync generated provider output 2026-08-01 00:50:56 +00:00
Paul BakausandClaude Fable 5 1052f6c3a4 Start the decision page escalated in sandboxed harnesses
Sandboxed shells cannot bind the board's port; every codex session paid
one failed start before retrying escalated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 17:50:19 -07:00
github-actions[bot] 4f10aed4ba Sync generated provider output 2026-08-01 00:50:15 +00:00
Paul BakausandClaude Fable 5 b89b4c41d3 Trim the spawn tax: no agent-def reads, long waits, one converter probe
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 17:49:40 -07:00
github-actions[bot] 1d4b98ea01 Sync generated provider output 2026-08-01 00:45:49 +00:00
Paul BakausandGitHub 68f13a225e Merge pull request #468 from pbakaus/codex/issue-463-wrapped-characteristics
Fix wrapped Key Characteristics parsing
2026-07-31 17:45:14 -07:00
github-actions[bot] 65a5197439 Sync generated provider output 2026-08-01 00:44:00 +00:00
Paul BakausandGitHub 3a2d3a9c42 Merge pull request #467 from pbakaus/codex/issue-464-seed-components
Fix seed DESIGN.md coverage checks
2026-07-31 17:43:21 -07:00
Paul BakausandGitHub c91f3717d4 Merge pull request #466 from pbakaus/codex/remove-legacy-pattern-parser
Simplify curated pattern loading
2026-07-31 17:41:55 -07:00
Paul Bakaus a3d7b247aa Cover provider seed markers
Recognize both slash- and dollar-prefixed prescribed seed markers and exercise each variant in coverage tests.

AI assistance: Codex addressed Cursor and Copilot review feedback and reran validation under maintainer authorization.
2026-07-31 17:32:57 -07:00
Paul Bakaus c91047d66a Fix seed design coverage
Treat Components as optional only when DESIGN.md carries the prescribed seed marker, while retaining Colors and Typography checks.

AI assistance: Codex reproduced the issue, implemented the fix, and added regression coverage under maintainer authorization.
2026-07-31 17:21:35 -07:00
Paul Bakaus c5eb38a381 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.
2026-07-31 17:21:29 -07:00
github-actions[bot] c83a7eced2 Sync generated provider output 2026-08-01 00:19:54 +00:00