@hegemonart/get-design-done 1.59.9 → 1.60.0

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.
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "Get Design Done — 5-stage agent-orchestrated design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 64 agents, 96 skills, 39 connection integrations, two MCP servers, opt-in SQLite state backbone, bidirectional Figma write-back, and a reflector-driven self-improvement loop. Cross-runtime install for Claude Code, Codex, Cursor, OpenCode, Gemini, and more.",
8
- "version": "1.59.9"
8
+ "version": "1.60.0"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "get-design-done",
13
13
  "source": "./",
14
14
  "description": "Agent-orchestrated 5-stage design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 64 specialized agents, 96 skills, 39 connection integrations (Figma, Refero, Preview, Storybook, Chromatic, Graphify, Linear, Jira, Notion, …), bidirectional Figma write-back, queryable intel store, opt-in SQLite state backbone, and a reflector-driven self-improvement loop. Two MCP servers (gdd-state for typed STATE mutators, gdd-mcp for 13 read-only project-priming tools), tier-aware routing with cost telemetry, and defense-in-depth hooks (protected paths, MCP circuit breaker, injection scanner, budget enforcer). Cross-runtime install for Claude Code, Codex, Cursor, OpenCode, Gemini, Copilot, and more.",
15
- "version": "1.59.9",
15
+ "version": "1.60.0",
16
16
  "author": {
17
17
  "name": "hegemonart"
18
18
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "get-design-done",
3
3
  "short_name": "gdd",
4
- "version": "1.59.9",
4
+ "version": "1.60.0",
5
5
  "description": "Agent-orchestrated 5-stage design pipeline (Brief → Explore → Plan → Design → Verify) for AI coding agents. 64 specialized agents, 96 skills, 39 connection integrations (Figma, Refero, Preview, Storybook, Chromatic, Graphify, Linear, Jira, Notion, …), bidirectional Figma write-back, queryable intel store for O(1) design-surface lookups, opt-in SQLite state backbone, and a reflector-driven self-improvement loop. Two MCP servers (`gdd-state` for typed STATE mutators, `gdd-mcp` for 13 read-only project-priming tools), tier-aware agent routing with cost telemetry, defense-in-depth hooks (protected paths, MCP circuit breaker, injection scanner, budget enforcer), and a cross-runtime install layer for Claude Code, Codex, Cursor, OpenCode, Gemini, Copilot, and more.",
6
6
  "author": {
7
7
  "name": "hegemonart",
package/CHANGELOG.md CHANGED
@@ -4,6 +4,31 @@ All notable changes to get-design-done are documented here. Versions follow [sem
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.60.0] - 2026-06-10
8
+
9
+ **Foundation & Honesty** - the subtract-first base the v2.0 work and the upcoming rebrand depend on. Make the catalog enumerable and the capability claims machine-checked *before* building or renaming anything. A pre-flight audit found the catalog already clean (0 content-duplicate skills, 0 orphan skills or agents, a perfect manifest to template to generated bijection, and every count and capability claim already tracing to source), so this release does not manufacture cuts - it removes genuinely dead code and adds the guards that lock the clean state in.
10
+
11
+ ### Removed
12
+
13
+ - **Dead jsdom/puppeteer detection scaffolding** from `gdd-detect`. The CLI carried soft `try-require` probes for a `jsdom` "DOM-aware" engine and a `puppeteer` URL engine, plus `--fast`/`--puppeteer` flags - none of which were ever wired (the engine is and was pure regex over local files). 1.59.8 stopped the misleading mode label; this release deletes the dead probes and flags outright and rewrites the comments/help to the regex-only reality. `gdd-detect --help` now matches what it does. (A real DOM/URL engine is planned separately; this removal is reversed then.)
14
+
15
+ ### Added
16
+
17
+ - **Catalog-integrity validator** (`validate:catalog`, wired into CI): exact content-hash duplicate detection across skill templates and agents, near-duplicate description detection (calibrated above the existing distinct-but-parallel writer family, so a future copy-paste clone is caught), a manifest to template to generated three-way bijection check (no orphans in any direction), and description-length sanity. Passes on the current catalog; fails if bloat, dupes, or orphans are introduced later.
18
+ - **Capability-honesty assertion** (in the same CI gate): every MCP server named in the plugin/marketplace manifests resolves to a real `sdk/mcp/<server>/server.ts`, and the advertised read-only MCP-tool count is derived from the actual `gdd_*.ts` tool files rather than hand-typed. Combined with the existing source-derived feature counts, the 64 agents / 96 skills / 39 integrations / 13 MCP-tools / 2 MCP-servers claims are now machine-verified.
19
+
20
+ ### Notes
21
+
22
+ - Catalog audited clean - no skills or agents were merged or deleted. The integrity guard exists to keep it that way.
23
+
24
+ ### Breaking changes
25
+
26
+ None.
27
+
28
+ 5,102/5,102 tests pass.
29
+
30
+ ---
31
+
7
32
  ## [1.59.9] - 2026-06-10
8
33
 
9
34
  New-model-family readiness and cost truth (audit `.planning/audits/SELF-AUDIT-v1.59.7.md` §4). A new or unknown Anthropic model previously degraded cost accounting silently - billed at $0 or the sonnet rate and mis-attributed to the sonnet tier. This release makes unknown models loud and conservative, handles the 1M-context `[1m]` variant, and records context-window size in the model registry.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hegemonart/get-design-done",
3
- "version": "1.59.9",
3
+ "version": "1.60.0",
4
4
  "description": "A design-quality pipeline for AI coding agents: brief, explore, plan, design, and verify UI work against your design system.",
5
5
  "author": "Hegemon",
6
6
  "homepage": "https://github.com/hegemonart/get-design-done",
@@ -84,6 +84,7 @@
84
84
  "validate:composition-graph": "node scripts/validate-composition-graph.cjs",
85
85
  "validate:design-context": "node scripts/validate-design-context.cjs",
86
86
  "validate:skill-frontmatter": "node scripts/validate-skill-frontmatter.cjs",
87
+ "validate:catalog": "node scripts/validate-catalog-integrity.cjs",
87
88
  "build:skill-graph": "node scripts/generate-skill-graph.cjs",
88
89
  "build:skill-graph:check": "node scripts/generate-skill-graph.cjs --check",
89
90
  "sync:rule-catalogue": "node scripts/sync-rule-catalogue.cjs --check",
@@ -1,38 +1,35 @@
1
1
  'use strict';
2
- // Phase 41 — gdd-detect CLI. Dep-free by default (regex-fast). The DOM-aware (jsdom) and URL
3
- // (puppeteer) paths are SOFT optionals loaded via try-require never a package.json dependency, so
4
- // the SC#10 network-isolation scan stays clean and the plugin keeps its zero-runtime-dep guarantee.
2
+ // Phase 41 — gdd-detect CLI. A regex anti-pattern scanner over LOCAL files: it walks a file or
3
+ // directory and runs each BAN-NN rule's matcher against the file text. There is exactly one engine
4
+ // (regex over file content) and it never touches the network or any optional dependency, so the
5
+ // SC#10 network-isolation scan stays clean and the plugin keeps its zero-runtime-dep guarantee.
5
6
  //
6
- // gdd-detect <path> [--json] [--fast] [--rule BAN-NN] [--puppeteer]
7
+ // gdd-detect <path> [--json] [--rule BAN-NN]
7
8
  //
8
9
  // Exit codes: 0 = clean · 2 = findings · 1 = invocation error.
9
10
 
10
11
  const engine = require('./engine.cjs');
11
12
 
12
- const HELP = `gdd-detect — scan HTML/CSS/JSX for GDD anti-patterns (BAN-NN).
13
+ const HELP = `gdd-detect — scan local HTML/CSS/JSX for GDD anti-patterns (BAN-NN).
13
14
 
14
15
  Usage:
15
16
  gdd-detect <path> [options]
16
17
 
17
18
  Arguments:
18
- <path> A file or directory (scanned recursively), or a http(s):// URL (needs --puppeteer).
19
+ <path> A file or directory (scanned recursively). Regex anti-pattern scan over local files.
19
20
 
20
21
  Options:
21
22
  --json Machine-readable JSON output.
22
- --fast Regex-only; do not load jsdom even if present.
23
23
  --rule <BAN-NN> Run a single rule (e.g. --rule BAN-08).
24
- --puppeteer Allow scanning a URL via Puppeteer (an optional, separately-installed dependency).
25
24
  -h, --help This help.
26
25
 
27
26
  Exit codes: 0 clean · 2 findings · 1 invocation error.`;
28
27
 
29
28
  function parseArgs(argv) {
30
- const opts = { path: null, json: false, fast: false, rule: null, puppeteer: false, help: false };
29
+ const opts = { path: null, json: false, rule: null, help: false };
31
30
  for (let i = 0; i < argv.length; i++) {
32
31
  const a = argv[i];
33
32
  if (a === '--json') opts.json = true;
34
- else if (a === '--fast') opts.fast = true;
35
- else if (a === '--puppeteer') opts.puppeteer = true;
36
33
  else if (a === '-h' || a === '--help') opts.help = true;
37
34
  else if (a === '--rule') opts.rule = argv[++i] || null;
38
35
  else if (a.startsWith('--rule=')) opts.rule = a.slice('--rule='.length);
@@ -46,22 +43,11 @@ function isUrl(p) {
46
43
  }
47
44
 
48
45
  /**
49
- * Select the detection engine. Returns { mode, warning }.
50
- *
51
- * There is exactly one engine path: regex over file text (see engine.cjs#run, which takes no
52
- * jsdom/DOM parameter and is byte-identical whether or not jsdom is installed). So the truthful
53
- * mode is always 'regex-fast'. We still probe jsdom (unless --fast) to surface a one-line hint
54
- * that a DOM-aware path is not wired in this build — but we no longer claim a 'dom-aware' mode the
55
- * engine does not have.
46
+ * Report the active engine. There is exactly one path: regex over file text (see engine.cjs#run).
47
+ * Returns { mode } so callers and the --json report can label output truthfully.
56
48
  */
57
- function selectEngine(opts, requireFn) {
58
- if (opts.fast) return { mode: 'regex-fast', warning: null };
59
- let hasJsdom = false;
60
- try { requireFn('jsdom'); hasJsdom = true; } catch { hasJsdom = false; }
61
- // jsdom presence does not change the engine — only emit a hint when it's absent, and never
62
- // promise a mode we can't deliver.
63
- const warning = hasJsdom ? null : 'jsdom not installed — running regex-fast (the only wired mode; a DOM-aware path is not implemented). Pass --fast to silence this.';
64
- return { mode: 'regex-fast', warning };
49
+ function selectEngine() {
50
+ return { mode: 'regex-fast' };
65
51
  }
66
52
 
67
53
  function renderHuman(result, mode) {
@@ -78,14 +64,13 @@ function renderHuman(result, mode) {
78
64
 
79
65
  /**
80
66
  * @param {string[]} argv process.argv.slice(2)
81
- * @param {{ cwd?: string, log?: fn, err?: fn, requireFn?: fn }} [io] injectable for tests
67
+ * @param {{ cwd?: string, log?: fn, err?: fn }} [io] injectable for tests
82
68
  * @returns {number} exit code
83
69
  */
84
70
  function main(argv, io) {
85
71
  const o = io || {};
86
72
  const log = o.log || ((s) => process.stdout.write(s + '\n'));
87
73
  const err = o.err || ((s) => process.stderr.write(s + '\n'));
88
- const requireFn = o.requireFn || require;
89
74
  const cwd = o.cwd || process.cwd();
90
75
  const opts = parseArgs(argv);
91
76
 
@@ -93,18 +78,13 @@ function main(argv, io) {
93
78
  if (!opts.path) { err('gdd-detect: missing <path>. See --help.'); return 1; }
94
79
  if (opts.rule && !/^BAN-\d{2}$/i.test(opts.rule)) { err(`gdd-detect: --rule expects a BAN-NN id (got "${opts.rule}").`); return 1; }
95
80
 
96
- // URL path Puppeteer (optional, separately installed). Never a stack trace.
81
+ // URL path is not wired: this is a regex scanner over local files. Never a stack trace.
97
82
  if (isUrl(opts.path)) {
98
- if (!opts.puppeteer) { err('gdd-detect: scanning a URL requires --puppeteer. Pass --puppeteer (and `npm i -D puppeteer`) to enable URL scans.'); return 1; }
99
- let hasPuppeteer = false;
100
- try { requireFn('puppeteer'); hasPuppeteer = true; } catch { hasPuppeteer = false; }
101
- if (!hasPuppeteer) { err('gdd-detect: --puppeteer given but puppeteer is not installed. Install it with `npm i -D puppeteer` (it stays an optional dependency).'); return 1; }
102
83
  err('gdd-detect: URL scanning is not wired in this build; clone the page locally and scan the files instead.');
103
84
  return 1;
104
85
  }
105
86
 
106
- const { mode, warning } = selectEngine(opts, requireFn);
107
- if (warning && !opts.json) err('gdd-detect: ' + warning);
87
+ const { mode } = selectEngine();
108
88
 
109
89
  let result;
110
90
  try { result = engine.run(opts.path, { ruleId: opts.rule, cwd }); }
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
- // Phase 41 — gdd-detect engine. Pure, dep-free (regex-fast path). Walks a path, runs each rule's
3
- // matcher against file content, returns structured findings. The DOM-aware (jsdom) + URL (puppeteer)
4
- // paths are layered on in cli.cjs via soft try-require; the engine itself never touches the network
5
- // or any optional dependency — so the SC#10 network-isolation scan stays clean.
2
+ // Phase 41 — gdd-detect engine. Pure, dep-free regex engine over file content. Walks a path, runs
3
+ // each rule's matcher against the text of each scannable file, and returns structured findings. The
4
+ // engine never touches the network or any optional dependency so the SC#10 network-isolation scan
5
+ // stays clean.
6
6
 
7
7
  const fs = require('node:fs');
8
8
  const path = require('node:path');