@hegemonart/get-design-done 1.43.0 → 1.45.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.
@@ -7,85 +7,351 @@
7
7
  "id": "claude",
8
8
  "name": "Claude Code",
9
9
  "config_dir": ".claude",
10
- "runtime_models_ref": "reference/runtime-models.md#claude"
10
+ "runtime_models_ref": "reference/runtime-models.md#claude",
11
+ "capability_matrix": {
12
+ "skill_discovery": true,
13
+ "frontmatter_fields_supported": [
14
+ "name",
15
+ "description",
16
+ "argument-hint",
17
+ "tools",
18
+ "disable-model-invocation"
19
+ ],
20
+ "command_syntax": "/gdd:<skill>",
21
+ "mcp_support": true,
22
+ "placeholder_substitution": true,
23
+ "install_path": "dist/claude-code/.claude/skills/",
24
+ "status": "tested"
25
+ },
26
+ "last_verified": "2026-06-02",
27
+ "capability_notes": "Host runtime. Marketplace-registered, end-to-end documented, Phase 42 golden baseline.",
28
+ "fragment_links": [
29
+ "reference/runtime-models.md#claude---claude-code"
30
+ ]
11
31
  },
12
32
  {
13
33
  "id": "codex",
14
34
  "name": "OpenAI Codex CLI",
15
35
  "config_dir": ".codex",
16
- "runtime_models_ref": "reference/runtime-models.md#codex"
36
+ "runtime_models_ref": "reference/runtime-models.md#codex",
37
+ "capability_matrix": {
38
+ "skill_discovery": true,
39
+ "frontmatter_fields_supported": [
40
+ "name",
41
+ "description",
42
+ "tools"
43
+ ],
44
+ "command_syntax": "/gdd-<skill>",
45
+ "mcp_support": true,
46
+ "placeholder_substitution": true,
47
+ "install_path": "dist/codex/.codex/skills/",
48
+ "status": "experimental"
49
+ },
50
+ "last_verified": null,
51
+ "capability_notes": "Peer-CLI delegation target (ASP). Flat /gdd- command namespace. MCP auto-registered.",
52
+ "fragment_links": [
53
+ "reference/runtime-models.md#codex---openai-codex-cli",
54
+ "reference/codex-tools.md#tool-name-mapping",
55
+ "reference/peer-cli-capabilities.md#codex-asp",
56
+ "reference/peer-protocols.md#asp---app-server-protocol-codex"
57
+ ]
17
58
  },
18
59
  {
19
60
  "id": "gemini",
20
61
  "name": "Gemini CLI",
21
62
  "config_dir": ".gemini",
22
- "runtime_models_ref": "reference/runtime-models.md#gemini"
63
+ "runtime_models_ref": "reference/runtime-models.md#gemini",
64
+ "capability_matrix": {
65
+ "skill_discovery": true,
66
+ "frontmatter_fields_supported": [
67
+ "name",
68
+ "description",
69
+ "tools"
70
+ ],
71
+ "command_syntax": "/gdd:<skill>",
72
+ "mcp_support": true,
73
+ "placeholder_substitution": true,
74
+ "install_path": "dist/gemini/.gemini/skills/",
75
+ "status": "experimental"
76
+ },
77
+ "last_verified": null,
78
+ "capability_notes": "",
79
+ "fragment_links": [
80
+ "reference/runtime-models.md#gemini---gemini-cli",
81
+ "reference/gemini-tools.md#tool-name-mapping",
82
+ "reference/peer-cli-capabilities.md#gemini-acp",
83
+ "reference/peer-protocols.md#acp---agent-client-protocol"
84
+ ]
23
85
  },
24
86
  {
25
87
  "id": "qwen",
26
88
  "name": "Qwen Code",
27
89
  "config_dir": ".qwen",
28
- "runtime_models_ref": "reference/runtime-models.md#qwen"
90
+ "runtime_models_ref": "reference/runtime-models.md#qwen",
91
+ "capability_matrix": {
92
+ "skill_discovery": true,
93
+ "frontmatter_fields_supported": [
94
+ "name",
95
+ "description",
96
+ "tools"
97
+ ],
98
+ "command_syntax": "/gdd:<skill>",
99
+ "mcp_support": false,
100
+ "placeholder_substitution": true,
101
+ "install_path": "dist/qwen/.qwen/skills/",
102
+ "status": "experimental"
103
+ },
104
+ "last_verified": null,
105
+ "capability_notes": "",
106
+ "fragment_links": [
107
+ "reference/runtime-models.md#qwen---qwen-code",
108
+ "reference/peer-cli-capabilities.md#qwen-acp",
109
+ "reference/peer-protocols.md#acp---agent-client-protocol"
110
+ ]
29
111
  },
30
112
  {
31
113
  "id": "kilo",
32
114
  "name": "Kilo Code",
33
115
  "config_dir": ".kilo",
34
- "runtime_models_ref": "reference/runtime-models.md#kilo"
116
+ "runtime_models_ref": "reference/runtime-models.md#kilo",
117
+ "capability_matrix": {
118
+ "skill_discovery": true,
119
+ "frontmatter_fields_supported": [
120
+ "name",
121
+ "description",
122
+ "tools"
123
+ ],
124
+ "command_syntax": "/gdd:<skill>",
125
+ "mcp_support": false,
126
+ "placeholder_substitution": true,
127
+ "install_path": "dist/kilo/.kilo/skills/",
128
+ "status": "untested"
129
+ },
130
+ "last_verified": null,
131
+ "capability_notes": "",
132
+ "fragment_links": [
133
+ "reference/runtime-models.md#kilo---kilo-code"
134
+ ]
35
135
  },
36
136
  {
37
137
  "id": "copilot",
38
138
  "name": "GitHub Copilot CLI",
39
139
  "config_dir": ".copilot",
40
- "runtime_models_ref": "reference/runtime-models.md#copilot"
140
+ "runtime_models_ref": "reference/runtime-models.md#copilot",
141
+ "capability_matrix": {
142
+ "skill_discovery": true,
143
+ "frontmatter_fields_supported": [
144
+ "name",
145
+ "description",
146
+ "tools"
147
+ ],
148
+ "command_syntax": "/gdd:<skill>",
149
+ "mcp_support": false,
150
+ "placeholder_substitution": true,
151
+ "install_path": "dist/copilot/.copilot/skills/",
152
+ "status": "experimental"
153
+ },
154
+ "last_verified": null,
155
+ "capability_notes": "",
156
+ "fragment_links": [
157
+ "reference/runtime-models.md#copilot---github-copilot-cli",
158
+ "reference/peer-cli-capabilities.md#copilot-acp",
159
+ "reference/peer-protocols.md#acp---agent-client-protocol"
160
+ ]
41
161
  },
42
162
  {
43
163
  "id": "cursor",
44
164
  "name": "Cursor",
45
165
  "config_dir": ".cursor",
46
- "runtime_models_ref": "reference/runtime-models.md#cursor"
166
+ "runtime_models_ref": "reference/runtime-models.md#cursor",
167
+ "capability_matrix": {
168
+ "skill_discovery": true,
169
+ "frontmatter_fields_supported": [
170
+ "name",
171
+ "description",
172
+ "tools"
173
+ ],
174
+ "command_syntax": "/gdd:<skill>",
175
+ "mcp_support": false,
176
+ "placeholder_substitution": true,
177
+ "install_path": "dist/cursor/.cursor/skills/",
178
+ "status": "experimental"
179
+ },
180
+ "last_verified": null,
181
+ "capability_notes": "",
182
+ "fragment_links": [
183
+ "reference/runtime-models.md#cursor---cursor",
184
+ "reference/peer-cli-capabilities.md#cursor-acp",
185
+ "reference/peer-protocols.md#acp---agent-client-protocol"
186
+ ]
47
187
  },
48
188
  {
49
189
  "id": "windsurf",
50
190
  "name": "Windsurf (Cascade)",
51
191
  "config_dir": ".windsurf",
52
- "runtime_models_ref": "reference/runtime-models.md#windsurf"
192
+ "runtime_models_ref": "reference/runtime-models.md#windsurf",
193
+ "capability_matrix": {
194
+ "skill_discovery": true,
195
+ "frontmatter_fields_supported": [
196
+ "name",
197
+ "description",
198
+ "tools"
199
+ ],
200
+ "command_syntax": "/gdd:<skill>",
201
+ "mcp_support": false,
202
+ "placeholder_substitution": true,
203
+ "install_path": "dist/windsurf/.windsurf/skills/",
204
+ "status": "untested"
205
+ },
206
+ "last_verified": null,
207
+ "capability_notes": "",
208
+ "fragment_links": [
209
+ "reference/runtime-models.md#windsurf---windsurf"
210
+ ]
53
211
  },
54
212
  {
55
213
  "id": "antigravity",
56
214
  "name": "Antigravity",
57
215
  "config_dir": ".antigravity",
58
- "runtime_models_ref": "reference/runtime-models.md#antigravity"
216
+ "runtime_models_ref": "reference/runtime-models.md#antigravity",
217
+ "capability_matrix": {
218
+ "skill_discovery": true,
219
+ "frontmatter_fields_supported": [
220
+ "name",
221
+ "description",
222
+ "tools"
223
+ ],
224
+ "command_syntax": "/gdd:<skill>",
225
+ "mcp_support": false,
226
+ "placeholder_substitution": true,
227
+ "install_path": "dist/antigravity/.antigravity/skills/",
228
+ "status": "untested"
229
+ },
230
+ "last_verified": null,
231
+ "capability_notes": "",
232
+ "fragment_links": [
233
+ "reference/runtime-models.md#antigravity---antigravity"
234
+ ]
59
235
  },
60
236
  {
61
237
  "id": "augment",
62
238
  "name": "Augment",
63
239
  "config_dir": ".augment",
64
- "runtime_models_ref": "reference/runtime-models.md#augment"
240
+ "runtime_models_ref": "reference/runtime-models.md#augment",
241
+ "capability_matrix": {
242
+ "skill_discovery": true,
243
+ "frontmatter_fields_supported": [
244
+ "name",
245
+ "description",
246
+ "tools"
247
+ ],
248
+ "command_syntax": "/gdd:<skill>",
249
+ "mcp_support": false,
250
+ "placeholder_substitution": true,
251
+ "install_path": "dist/augment/.augment/skills/",
252
+ "status": "untested"
253
+ },
254
+ "last_verified": null,
255
+ "capability_notes": "",
256
+ "fragment_links": [
257
+ "reference/runtime-models.md#augment---augment"
258
+ ]
65
259
  },
66
260
  {
67
261
  "id": "trae",
68
262
  "name": "Trae",
69
263
  "config_dir": ".trae",
70
- "runtime_models_ref": "reference/runtime-models.md#trae"
264
+ "runtime_models_ref": "reference/runtime-models.md#trae",
265
+ "capability_matrix": {
266
+ "skill_discovery": true,
267
+ "frontmatter_fields_supported": [
268
+ "name",
269
+ "description",
270
+ "tools"
271
+ ],
272
+ "command_syntax": "/gdd:<skill>",
273
+ "mcp_support": false,
274
+ "placeholder_substitution": true,
275
+ "install_path": "dist/trae/.trae/skills/",
276
+ "status": "untested"
277
+ },
278
+ "last_verified": null,
279
+ "capability_notes": "",
280
+ "fragment_links": [
281
+ "reference/runtime-models.md#trae---trae"
282
+ ]
71
283
  },
72
284
  {
73
285
  "id": "codebuddy",
74
286
  "name": "CodeBuddy",
75
287
  "config_dir": ".codebuddy",
76
- "runtime_models_ref": "reference/runtime-models.md#codebuddy"
288
+ "runtime_models_ref": "reference/runtime-models.md#codebuddy",
289
+ "capability_matrix": {
290
+ "skill_discovery": true,
291
+ "frontmatter_fields_supported": [
292
+ "name",
293
+ "description",
294
+ "tools"
295
+ ],
296
+ "command_syntax": "/gdd:<skill>",
297
+ "mcp_support": false,
298
+ "placeholder_substitution": true,
299
+ "install_path": "dist/codebuddy/.codebuddy/skills/",
300
+ "status": "untested"
301
+ },
302
+ "last_verified": null,
303
+ "capability_notes": "",
304
+ "fragment_links": [
305
+ "reference/runtime-models.md#codebuddy---codebuddy"
306
+ ]
77
307
  },
78
308
  {
79
309
  "id": "cline",
80
310
  "name": "Cline",
81
311
  "config_dir": ".cline",
82
- "runtime_models_ref": "reference/runtime-models.md#cline"
312
+ "runtime_models_ref": "reference/runtime-models.md#cline",
313
+ "capability_matrix": {
314
+ "skill_discovery": true,
315
+ "frontmatter_fields_supported": [
316
+ "name",
317
+ "description",
318
+ "tools"
319
+ ],
320
+ "command_syntax": "/gdd:<skill>",
321
+ "mcp_support": false,
322
+ "placeholder_substitution": true,
323
+ "install_path": "dist/cline/.cline/skills/",
324
+ "status": "untested"
325
+ },
326
+ "last_verified": null,
327
+ "capability_notes": "Installs into .clinerules at install time (clinerules-embed special case); dist/cline/ is the compile artifact only.",
328
+ "fragment_links": [
329
+ "reference/runtime-models.md#cline---cline"
330
+ ]
83
331
  },
84
332
  {
85
333
  "id": "opencode",
86
334
  "name": "OpenCode",
87
335
  "config_dir": ".opencode",
88
- "runtime_models_ref": "reference/runtime-models.md#opencode"
336
+ "runtime_models_ref": "reference/runtime-models.md#opencode",
337
+ "capability_matrix": {
338
+ "skill_discovery": true,
339
+ "frontmatter_fields_supported": [
340
+ "name",
341
+ "description",
342
+ "tools"
343
+ ],
344
+ "command_syntax": "/gdd:<skill>",
345
+ "mcp_support": false,
346
+ "placeholder_substitution": true,
347
+ "install_path": "dist/opencode/.opencode/skills/",
348
+ "status": "untested"
349
+ },
350
+ "last_verified": null,
351
+ "capability_notes": "",
352
+ "fragment_links": [
353
+ "reference/runtime-models.md#opencode---opencode"
354
+ ]
89
355
  }
90
356
  ]
91
357
  }
@@ -30,6 +30,38 @@
30
30
  "name": {
31
31
  "type": "string",
32
32
  "minLength": 1
33
+ },
34
+ "last_verified": {
35
+ "type": ["string", "null"],
36
+ "description": "YYYY-MM-DD of the last verify-harness run; null if never verified (Phase 44)."
37
+ },
38
+ "capability_notes": {
39
+ "type": "string"
40
+ },
41
+ "fragment_links": {
42
+ "type": "array",
43
+ "items": { "type": "string" }
44
+ },
45
+ "capability_matrix": {
46
+ "type": "object",
47
+ "description": "Phase 44 harness capability matrix (a view of this SoT; HARNESSES.md is generated from it).",
48
+ "additionalProperties": true,
49
+ "required": ["status", "command_syntax", "install_path"],
50
+ "properties": {
51
+ "skill_discovery": { "type": "boolean" },
52
+ "frontmatter_fields_supported": {
53
+ "type": "array",
54
+ "items": { "type": "string" }
55
+ },
56
+ "command_syntax": { "type": "string", "minLength": 1 },
57
+ "mcp_support": { "type": "boolean" },
58
+ "placeholder_substitution": { "type": "boolean" },
59
+ "install_path": { "type": "string", "minLength": 1 },
60
+ "status": {
61
+ "type": "string",
62
+ "enum": ["tested", "experimental", "untested", "known-broken"]
63
+ }
64
+ }
33
65
  }
34
66
  }
35
67
  }
@@ -136,6 +136,107 @@ var require_kill_switch = __commonJS({
136
136
  }
137
137
  });
138
138
 
139
+ // scripts/lib/manifest/loader.cjs
140
+ var require_loader = __commonJS({
141
+ "scripts/lib/manifest/loader.cjs"(exports2, module2) {
142
+ "use strict";
143
+ var fs = require("node:fs");
144
+ var path = require("node:path");
145
+ var MANIFEST_DIR = __dirname;
146
+ var _cache = /* @__PURE__ */ new Map();
147
+ function reset() {
148
+ _cache.clear();
149
+ }
150
+ function load(name13, opts) {
151
+ const o = opts || {};
152
+ const dir = o.dir || MANIFEST_DIR;
153
+ const fallback = Object.prototype.hasOwnProperty.call(o, "fallback") ? o.fallback : {};
154
+ const abs = path.join(dir, `${name13}.json`);
155
+ let stat;
156
+ try {
157
+ stat = fs.statSync(abs);
158
+ } catch {
159
+ if (!o.quiet) process.stderr.write(`manifest: ${name13}.json not found \u2014 using empty fallback (a consumer phase may not have shipped its data yet)
160
+ `);
161
+ return fallback;
162
+ }
163
+ const cached = _cache.get(abs);
164
+ if (cached && cached.mtimeMs === stat.mtimeMs) return cached.data;
165
+ try {
166
+ const data = JSON.parse(fs.readFileSync(abs, "utf8"));
167
+ _cache.set(abs, { mtimeMs: stat.mtimeMs, data });
168
+ return data;
169
+ } catch (e) {
170
+ if (!o.quiet) process.stderr.write(`manifest: ${name13}.json parse error (${e.message}) \u2014 using empty fallback
171
+ `);
172
+ return fallback;
173
+ }
174
+ }
175
+ module2.exports = { load, reset, MANIFEST_DIR };
176
+ }
177
+ });
178
+
179
+ // scripts/lib/manifest/index.cjs
180
+ var require_manifest = __commonJS({
181
+ "scripts/lib/manifest/index.cjs"(exports2, module2) {
182
+ "use strict";
183
+ var loader = require_loader();
184
+ function readHarnesses(opts) {
185
+ return loader.load("harnesses", { ...opts, fallback: { schema_version: 1, generated_at: null, harnesses: [] } });
186
+ }
187
+ function readSkills(opts) {
188
+ return loader.load("skills", { ...opts, fallback: { schema_version: 1, skills: [] } });
189
+ }
190
+ function readProseDenylist(opts) {
191
+ return loader.load("prose-denylist", { ...opts, fallback: { schema_version: 1, tells: [] } });
192
+ }
193
+ module2.exports = {
194
+ readHarnesses,
195
+ readSkills,
196
+ readProseDenylist,
197
+ reset: loader.reset,
198
+ MANIFEST_DIR: loader.MANIFEST_DIR
199
+ };
200
+ }
201
+ });
202
+
203
+ // scripts/lib/harness-freshness.cjs
204
+ var require_harness_freshness = __commonJS({
205
+ "scripts/lib/harness-freshness.cjs"(exports2, module2) {
206
+ "use strict";
207
+ var { readHarnesses } = require_manifest();
208
+ var WARN_DAYS = 60;
209
+ var FAIL_DAYS = 180;
210
+ var MS_PER_DAY = 864e5;
211
+ function ageInDays(last_verified, nowMs) {
212
+ if (!last_verified) return Infinity;
213
+ const t = Date.parse(last_verified);
214
+ if (!Number.isFinite(t)) return Infinity;
215
+ return (nowMs - t) / MS_PER_DAY;
216
+ }
217
+ function checkFreshness({ nowMs, harnesses } = {}) {
218
+ const list = harnesses || readHarnesses().harnesses || [];
219
+ const now = typeof nowMs === "number" ? nowMs : Date.now();
220
+ return list.map((h) => {
221
+ const status = h.capability_matrix && h.capability_matrix.status || "untested";
222
+ const age = ageInDays(h.last_verified, now);
223
+ let freshness = "n/a";
224
+ if (status === "tested") {
225
+ freshness = age >= FAIL_DAYS ? "fail" : age >= WARN_DAYS ? "warn" : "ok";
226
+ }
227
+ return {
228
+ id: h.id,
229
+ status,
230
+ last_verified: h.last_verified || null,
231
+ age_days: Number.isFinite(age) ? Math.floor(age) : null,
232
+ freshness
233
+ };
234
+ });
235
+ }
236
+ module2.exports = { checkFreshness, ageInDays, WARN_DAYS, FAIL_DAYS };
237
+ }
238
+ });
239
+
139
240
  // scripts/lib/health-mirror/index.cjs
140
241
  var require_health_mirror = __commonJS({
141
242
  "scripts/lib/health-mirror/index.cjs"(exports2, module2) {
@@ -143,6 +244,7 @@ var require_health_mirror = __commonJS({
143
244
  var fs = require("node:fs");
144
245
  var path = require("node:path");
145
246
  var { getDisableReason } = require_kill_switch();
247
+ var { checkFreshness, WARN_DAYS, FAIL_DAYS } = require_harness_freshness();
146
248
  function fileExists(p) {
147
249
  try {
148
250
  return fs.statSync(p).isFile();
@@ -270,6 +372,29 @@ var require_health_mirror = __commonJS({
270
372
  }
271
373
  checks.push({ name: "skill_discipline", status, detail });
272
374
  }
375
+ {
376
+ let status = "ok";
377
+ let detail;
378
+ try {
379
+ const results = checkFreshness();
380
+ const failing = results.filter((r) => r.freshness === "fail");
381
+ const warning = results.filter((r) => r.freshness === "warn");
382
+ const tested = results.filter((r) => r.status === "tested");
383
+ if (failing.length) {
384
+ status = "fail";
385
+ detail = `harness freshness: ${failing.length} stale (>${FAIL_DAYS}d): ${failing.map((r) => r.id).join(", ")}`;
386
+ } else if (warning.length) {
387
+ status = "warn";
388
+ detail = `harness freshness: ${warning.length} aging (>${WARN_DAYS}d): ${warning.map((r) => r.id).join(", ")}`;
389
+ } else {
390
+ detail = `harness freshness: ${tested.length} tested harness(es) current`;
391
+ }
392
+ } catch {
393
+ status = "warn";
394
+ detail = "harness freshness: unavailable";
395
+ }
396
+ checks.push({ name: "harness_freshness", status, detail });
397
+ }
273
398
  return { checks };
274
399
  }
275
400
  function sessionStartWiresInject(rootDir) {
@@ -67,7 +67,7 @@ Token PRESENCE only is detected (D-10) - the token value is never read, logged,
67
67
 
68
68
  The `gdd_health` MCP surface also reports a `skill_discipline` check (Phase 32) confirming the using-gdd SessionStart bootstrap is live - detail is one of three exact strings:
69
69
  - `skill-discipline: ready` - `skills/using-gdd/SKILL.md` exists AND `hooks/hooks.json` SessionStart wires `inject-using-gdd.sh` (status `ok`).
70
- - `skill-discipline: missing using-gdd` (skill absent) or `skill-discipline: hook not wired` (skill present, no SessionStart inject) - both `warn`.
70
+ - `skill-discipline: missing using-gdd` (skill absent) or `skill-discipline: hook not wired` (skill present, no SessionStart inject) - both `warn`. The MCP surface also reports a `harness_freshness` check (Phase 44): per-harness `last_verified` age, status-aware (only `tested` harnesses warn at 60d / fail at 180d; others `n/a`). Full taxonomy in `HARNESSES.md`; refresh with `npm run verify:harness <id>`.
71
71
 
72
72
  ## Check MCP registration (gdd-mcp)
73
73