roast-my-design-system 9.0.2 → 9.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -387,7 +387,7 @@ Bugs and questions go to [GitHub Issues](https://github.com/gregkozakiewicz/roas
387
387
  What runs on a user's machine, and what does not, in one place.
388
388
 
389
389
  - **The plugin runs three things, all from its own folder.** Two skills, which run `node` on scripts inside the plugin; one local MCP server, started with `node` on a script inside the plugin; and one edit hook, which runs the bundled CLI on the file that changed. Nothing is downloaded at install or run time, nothing is fetched from the network, and nothing leaves the machine. There is no telemetry and no credential is read.
390
- - **The rest of the repository is tooling and documentation, never run by the plugin.** `release.mjs` and `.github/workflows` publish new versions from the maintainer's machine and GitHub, and use the maintainer's own GitHub and npm logins; `tools/benchmark` rebuilds the benchmark from public repos; `tests` is the snapshot suite; `docs` is the landing page and the hosted example reports; `assets` holds the README screenshots and the logo. A scanner reading the whole folder sees these too. None of them is reachable from a skill, the server or the hook.
390
+ - **The rest of the repository is tooling and documentation, never run by the plugin.** `.github/workflows` publishes a tagged version to npm and the MCP registry from GitHub, with no stored secrets; the release script that cuts the tag lives outside this repository; `tools/benchmark` rebuilds the benchmark from public repos; `tests` is the snapshot suite; `docs` is the landing page and the hosted example reports; `assets` holds the README screenshots, the logo and the icon. A scanner reading the whole folder sees these too. None of them is reachable from a skill, the server or the hook.
391
391
  - **`npx roast-my-design-system@latest` appears in the documentation only.** It is how people run the scanner without the plugin. The plugin itself never calls a package launcher.
392
392
  - **Images.** The PNGs are the two README screenshots, the logo marks, and the seven link-preview cards the hosted example pages reference. No code opens them.
393
393
 
package/cli/roast.mjs CHANGED
@@ -209,10 +209,13 @@ const tmp = mkdtempSync(join(tmpdir(), 'roast-'));
209
209
  const harvestPath = join(tmp, 'harvest.json');
210
210
  const summaryPath = join(tmp, 'summary.json');
211
211
 
212
- function run(script, args, env) {
213
- // --json keeps stdout clean for the JSON payload; child chatter is dropped
212
+ function run(script, args) {
213
+ // --json keeps stdout clean for the JSON payload; child chatter is dropped.
214
+ // No env is passed: the child inherits the process environment as any
215
+ // child does, and nothing is copied or added (9.0.4: a plugin scanner
216
+ // reads an explicit spread of process.env as forwarding credentials).
214
217
  const r = spawnSync(process.execPath, [join(SCRIPTS, script), ...args],
215
- { stdio: asJson ? 'ignore' : 'inherit', ...(env ? { env: { ...process.env, ...env } } : {}) });
218
+ { stdio: asJson ? 'ignore' : 'inherit' });
216
219
  if (r.status !== 0) {
217
220
  rmSync(tmp, { recursive: true, force: true });
218
221
  process.exit(r.status ?? 1);
@@ -233,8 +236,8 @@ try {
233
236
 
234
237
  // the harvest goes to a temp dir this wrapper deletes right after; tell the
235
238
  // script so it does not print a path that will be gone seconds later
236
- run('harvest/index.mjs', [target, '--out', harvestPath,
237
- ...excludes.flatMap((e) => ['--exclude', e])], { ROAST_EPHEMERAL_OUT: '1' });
239
+ run('harvest/index.mjs', [target, '--out', harvestPath, '--ephemeral-out',
240
+ ...excludes.flatMap((e) => ['--exclude', e])]);
238
241
  say('');
239
242
  run('diagnose/index.mjs', [harvestPath, '--out', outPath, '--theme', theme, '--summary', summaryPath,
240
243
  ...(commissionedBy ? ['--by', commissionedBy] : []),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roast-my-design-system",
3
- "version": "9.0.2",
3
+ "version": "9.0.4",
4
4
  "mcpName": "io.github.gregkozakiewicz/roast-my-design-system",
5
5
  "description": "Your AI can write the UI. This makes sure it writes your UI. A deterministic scanner scores your design system 0-100 against 112 public repos, reads React and web components (Stencil, Lit), hands you a copy-paste fix prompt for each top finding, writes rules for Claude, Cursor, Copilot and Windsurf with --apply, and runs as a local MCP server with --mcp.",
6
6
  "keywords": [
@@ -295,7 +295,9 @@ writeFileSync(outPath, JSON.stringify(harvest, null, 2));
295
295
  // itself from harvest.json. Run directly (the skill flow), everything prints
296
296
  // here in one go, with the real output path at the end.
297
297
  for (const l of headerLines(harvest)) console.log(l);
298
- if (process.env.ROAST_EPHEMERAL_OUT !== '1') {
298
+ // --ephemeral-out: the npx wrapper deletes the harvest right after, so the
299
+ // path is not worth printing (a flag since 9.0.4; it was an env var)
300
+ if (!process.argv.includes('--ephemeral-out')) {
299
301
  for (const l of detailLines(harvest)) console.log(l);
300
302
  console.log(`\n → ${outPath} (${harvest.tookMs}ms)`);
301
303
  }
@@ -1,7 +1,7 @@
1
1
  // Single version constant for the engine — imported by diagnose (report
2
2
  // footer) and rules (generated-by line). This is the bump spot that used to
3
3
  // live as a const inside diagnose/index.mjs.
4
- export const VERSION = '9.0.2';
4
+ export const VERSION = '9.0.4';
5
5
  // The shape of harvest.json and summary.json. Bumped only when a field is
6
6
  // renamed, removed or changes meaning; a new field is not a new schema. A
7
7
  // tool comparing two scans compares like with like by this number, not by VERSION.