@skillcap/gdh 0.26.1 → 0.26.2
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/INSTALL-BUNDLE.json +1 -1
- package/RELEASE-SPAN-UPDATE-CONTRACTS.json +57 -0
- package/node_modules/@gdh/adapters/dist/templates/authoring-hook.js.tpl +38 -0
- package/node_modules/@gdh/adapters/package.json +8 -8
- package/node_modules/@gdh/authoring/package.json +2 -2
- package/node_modules/@gdh/cli/package.json +10 -10
- package/node_modules/@gdh/core/dist/index.d.ts +1 -1
- package/node_modules/@gdh/core/dist/index.js +1 -1
- package/node_modules/@gdh/core/package.json +1 -1
- package/node_modules/@gdh/docs/package.json +2 -2
- package/node_modules/@gdh/mcp/package.json +8 -8
- package/node_modules/@gdh/observability/package.json +2 -2
- package/node_modules/@gdh/runtime/package.json +2 -2
- package/node_modules/@gdh/scan/package.json +3 -3
- package/node_modules/@gdh/verify/package.json +7 -7
- package/package.json +11 -11
package/INSTALL-BUNDLE.json
CHANGED
|
@@ -3004,6 +3004,63 @@
|
|
|
3004
3004
|
}
|
|
3005
3005
|
]
|
|
3006
3006
|
}
|
|
3007
|
+
},
|
|
3008
|
+
{
|
|
3009
|
+
"version": "0.26.2",
|
|
3010
|
+
"releaseTag": "v0.26.2",
|
|
3011
|
+
"migrationStatus": "required",
|
|
3012
|
+
"summary": "v0.26.2 bumps GDH_UPDATE_HOOK_VERSION 10 -> 11 to land the new Stop hook git-gate. handleStop now noops when zero authoring-file changes exist in the working tree under targetRoot, scoped via `git -C <targetRoot> status --porcelain -- .`. Class-1 deterministic re-bake (D-09 / D-03 exempt — GDH_UPDATE_HOOK_VERSION is in CLASS_ONE_REBAKE_EXEMPT). Managed targets re-bake the authoring-hook.js via gdh self-update or gdh migrate --apply. No surface-schema changes; no AGENTS.md contract bump; no broker schema bump.",
|
|
3013
|
+
"releaseHighlights": {
|
|
3014
|
+
"summary": "v0.26.2 is a patch release that closes a hot path in the Stop hook: when the agent's session touched zero authoring files inside the configured Godot target, the Stop hook used to unconditionally run `gdh authoring check --mode final`, cold-launching Godot if the LSP was not already warm. In monorepos where the Godot target is at `apps/game` and the agent's session only edited `apps/web/`, `packages/api/`, or `README.md` files, that produced a multi-second wallclock spike + ~850 MB RSS for a project the agent never touched. The Stop hook now noops via a fast `git status --porcelain` check scoped to the target subtree.",
|
|
3015
|
+
"operatorChanges": [
|
|
3016
|
+
"**Stop hook noops on zero authoring-file changes.** A new `hasAuthoringWorkInTarget(targetRoot)` helper runs `git -C <targetRoot> status --porcelain -- .` (1500 ms timeout), parses porcelain output (handles renames `R OLD -> NEW` and quoted paths with embedded spaces), and returns `true` only if at least one tracked or untracked path matches the existing `isAuthoringValidationPath` predicate (`.gd` / `.tscn` / `.tres` / `project.godot`). When false, `handleStop` returns `allow()` immediately — zero `npx`, zero `gdh authoring check`, zero LSP launch.",
|
|
3017
|
+
"**Fail-closed on git error.** Any spawn throw, non-zero exit, signal kill, or missing `git` binary on `PATH` makes the helper return `true`, preserving the current always-run behavior. No regression for environments without git.",
|
|
3018
|
+
"**`GDH_AUTHORING_STOP_GIT_GATE=0` env override.** Operators who prefer the always-run behavior (belt-and-suspenders for projects with sparse git history or unusual workflows) can opt out by setting this env var on the agent process. Empty string, unset, or any other value keeps the gate enabled.",
|
|
3019
|
+
"**PostToolUse and PostToolBatch behavior unchanged.** Both already filter non-Godot edits via `normalizeToTargetRelative` (drops paths outside `targetRoot`) plus the `isAuthoringValidationPath` extension check. The new helper is wired only into `handleStop`."
|
|
3020
|
+
]
|
|
3021
|
+
},
|
|
3022
|
+
"updateContract": {
|
|
3023
|
+
"summary": "Managed targets must re-bake the managed authoring-hook.js so handleStop picks up the new git-gate. Re-render is deterministic; no manual editor steps. Operators on macOS / monorepo / mixed-language repositories see the largest behavior delta — Stop hook stops cold-launching Godot when only non-authoring files were edited in the session.",
|
|
3024
|
+
"steps": [
|
|
3025
|
+
{
|
|
3026
|
+
"id": "install_v0_26_2",
|
|
3027
|
+
"kind": "mechanical",
|
|
3028
|
+
"summary": "Install the v0.26.2 GDH package.",
|
|
3029
|
+
"detail": "Run gdh self-update so the target uses the new managed authoring-hook.js fingerprint (hook version 11) and Stop hook git-gate.",
|
|
3030
|
+
"commands": [
|
|
3031
|
+
"gdh self-update --apply"
|
|
3032
|
+
],
|
|
3033
|
+
"validationCommands": [
|
|
3034
|
+
"gdh status",
|
|
3035
|
+
"gdh adapters status"
|
|
3036
|
+
]
|
|
3037
|
+
},
|
|
3038
|
+
{
|
|
3039
|
+
"id": "rebake_authoring_hook",
|
|
3040
|
+
"kind": "mechanical",
|
|
3041
|
+
"summary": "Re-bake managed authoring-hook.js via gdh migrate --apply.",
|
|
3042
|
+
"detail": "If gdh self-update reports pending lifecycle work, run gdh migrate --apply. The migrate path re-renders the managed Codex authoring hook and the Claude authoring hook templates with hook version 11. The gate behavior is opaque to AGENTS.md contract surfaces and skill bodies; no other re-bake required for this release.",
|
|
3043
|
+
"commands": [
|
|
3044
|
+
"gdh migrate --apply"
|
|
3045
|
+
],
|
|
3046
|
+
"validationCommands": [
|
|
3047
|
+
"gdh adapters status"
|
|
3048
|
+
]
|
|
3049
|
+
},
|
|
3050
|
+
{
|
|
3051
|
+
"id": "confirm_stop_gate",
|
|
3052
|
+
"kind": "agent_reasoning",
|
|
3053
|
+
"summary": "Confirm the new Stop hook git-gate is active.",
|
|
3054
|
+
"detail": "Inspect the rendered authoring-hook.js header for `hook version 11` and confirm hasAuthoringWorkInTarget appears in the script. Optionally exercise: in a session where the agent only edits a non-authoring file (e.g. README.md), confirm session-end Stop produces no `gdh authoring check --mode final` invocation. Set GDH_AUTHORING_STOP_GIT_GATE=0 if a fallback to always-run is desired.",
|
|
3055
|
+
"commands": [
|
|
3056
|
+
"gdh adapters status"
|
|
3057
|
+
],
|
|
3058
|
+
"validationCommands": [
|
|
3059
|
+
"gdh adapters status"
|
|
3060
|
+
]
|
|
3061
|
+
}
|
|
3062
|
+
]
|
|
3063
|
+
}
|
|
3007
3064
|
}
|
|
3008
3065
|
]
|
|
3009
3066
|
}
|
|
@@ -215,6 +215,7 @@ function spawnDetachedWarmup(targetRoot) {
|
|
|
215
215
|
// holding the lock, the 5 s LSP_STATE_LOCK_ACQUIRE_TIMEOUT_MS retry loop inside
|
|
216
216
|
// the lock primitive handles the wait (Pitfall 9 — well within 60 s).
|
|
217
217
|
function handleStop(input, targetRoot) {
|
|
218
|
+
if (!hasAuthoringWorkInTarget(targetRoot)) return allow();
|
|
218
219
|
const result = runGdh(
|
|
219
220
|
targetRoot,
|
|
220
221
|
['authoring', 'check', '--target', targetRoot, '--mode', 'final', '--format', 'compact'],
|
|
@@ -310,6 +311,43 @@ function isAuthoringValidationPath(file) {
|
|
|
310
311
|
return AUTHORING_EXTENSIONS.has(path.extname(file).toLowerCase());
|
|
311
312
|
}
|
|
312
313
|
|
|
314
|
+
// GF3 (260504): session-end git-gate. Stop hook noops when zero authoring-file
|
|
315
|
+
// changes exist in the working tree under targetRoot. Fails closed (returns
|
|
316
|
+
// true) on any git failure so the freshness barrier never silently weakens.
|
|
317
|
+
//
|
|
318
|
+
// Honors GDH_AUTHORING_STOP_GIT_GATE=0 as an ops escape valve.
|
|
319
|
+
function hasAuthoringWorkInTarget(targetRoot) {
|
|
320
|
+
if (process.env['GDH_AUTHORING_STOP_GIT_GATE'] === '0') return true;
|
|
321
|
+
let result;
|
|
322
|
+
try {
|
|
323
|
+
result = spawnSync('git', ['-C', targetRoot, 'status', '--porcelain', '--', '.'], {
|
|
324
|
+
encoding: 'utf8',
|
|
325
|
+
timeout: 1500,
|
|
326
|
+
windowsHide: true,
|
|
327
|
+
});
|
|
328
|
+
} catch (_error) {
|
|
329
|
+
return true; // fail-closed: spawn threw (e.g. git missing on PATH)
|
|
330
|
+
}
|
|
331
|
+
if (!result || result.error || result.status !== 0 || result.signal) return true;
|
|
332
|
+
const lines = String(result.stdout || '').split('\n');
|
|
333
|
+
for (const raw of lines) {
|
|
334
|
+
if (!raw) continue;
|
|
335
|
+
// Porcelain v1: 2 status chars + space + path (or path -> path for renames).
|
|
336
|
+
// Skip lines shorter than the minimum "XY P" shape.
|
|
337
|
+
if (raw.length < 4) continue;
|
|
338
|
+
let rest = raw.slice(3);
|
|
339
|
+
// Renames / copies: "OLD -> NEW" — take NEW.
|
|
340
|
+
const arrow = rest.indexOf(' -> ');
|
|
341
|
+
if (arrow !== -1) rest = rest.slice(arrow + 4);
|
|
342
|
+
// Quoted paths (spaces / non-ASCII): strip surrounding quotes.
|
|
343
|
+
if (rest.startsWith('"') && rest.endsWith('"')) {
|
|
344
|
+
rest = rest.slice(1, -1);
|
|
345
|
+
}
|
|
346
|
+
if (isAuthoringValidationPath(rest)) return true;
|
|
347
|
+
}
|
|
348
|
+
return false;
|
|
349
|
+
}
|
|
350
|
+
|
|
313
351
|
function resolveTargetRoot(input) {
|
|
314
352
|
const base = path.resolve(__dirname, '..', '..');
|
|
315
353
|
const fromScript = path.resolve(base, TARGET_RELATIVE_PATH || '.');
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@gdh/authoring": "0.26.
|
|
15
|
-
"@gdh/core": "0.26.
|
|
16
|
-
"@gdh/docs": "0.26.
|
|
17
|
-
"@gdh/observability": "0.26.
|
|
18
|
-
"@gdh/runtime": "0.26.
|
|
19
|
-
"@gdh/scan": "0.26.
|
|
20
|
-
"@gdh/verify": "0.26.
|
|
14
|
+
"@gdh/authoring": "0.26.2",
|
|
15
|
+
"@gdh/core": "0.26.2",
|
|
16
|
+
"@gdh/docs": "0.26.2",
|
|
17
|
+
"@gdh/observability": "0.26.2",
|
|
18
|
+
"@gdh/runtime": "0.26.2",
|
|
19
|
+
"@gdh/scan": "0.26.2",
|
|
20
|
+
"@gdh/verify": "0.26.2"
|
|
21
21
|
},
|
|
22
|
-
"version": "0.26.
|
|
22
|
+
"version": "0.26.2"
|
|
23
23
|
}
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@clack/prompts": "^1.2.0",
|
|
18
|
-
"@gdh/adapters": "0.26.
|
|
19
|
-
"@gdh/authoring": "0.26.
|
|
20
|
-
"@gdh/core": "0.26.
|
|
21
|
-
"@gdh/docs": "0.26.
|
|
22
|
-
"@gdh/mcp": "0.26.
|
|
23
|
-
"@gdh/observability": "0.26.
|
|
24
|
-
"@gdh/runtime": "0.26.
|
|
25
|
-
"@gdh/scan": "0.26.
|
|
26
|
-
"@gdh/verify": "0.26.
|
|
18
|
+
"@gdh/adapters": "0.26.2",
|
|
19
|
+
"@gdh/authoring": "0.26.2",
|
|
20
|
+
"@gdh/core": "0.26.2",
|
|
21
|
+
"@gdh/docs": "0.26.2",
|
|
22
|
+
"@gdh/mcp": "0.26.2",
|
|
23
|
+
"@gdh/observability": "0.26.2",
|
|
24
|
+
"@gdh/runtime": "0.26.2",
|
|
25
|
+
"@gdh/scan": "0.26.2",
|
|
26
|
+
"@gdh/verify": "0.26.2",
|
|
27
27
|
"picocolors": "^1.1.1"
|
|
28
28
|
},
|
|
29
|
-
"version": "0.26.
|
|
29
|
+
"version": "0.26.2"
|
|
30
30
|
}
|
|
@@ -55,7 +55,7 @@ export declare const GDH_AUTHORING_DOGFOOD_VERSION = 1;
|
|
|
55
55
|
export declare const GDH_AUTHORING_SLICE_REPORT_VERSION = 1;
|
|
56
56
|
export declare const GDH_MCP_MANIFEST_VERSION = 1;
|
|
57
57
|
export declare const GDH_CURSOR_RULE_VERSION = 4;
|
|
58
|
-
export declare const GDH_UPDATE_HOOK_VERSION =
|
|
58
|
+
export declare const GDH_UPDATE_HOOK_VERSION = 11;
|
|
59
59
|
export declare const GDH_RUNTIME_RECIPE_RUN_VERSION = 1;
|
|
60
60
|
export declare const GDH_RUNTIME_RUN_BUNDLE_VERSION = 1;
|
|
61
61
|
export declare const GDH_RUNTIME_CORPUS_ARTIFACT_VERSION = 1;
|
|
@@ -47,7 +47,7 @@ export const GDH_AUTHORING_DOGFOOD_VERSION = 1;
|
|
|
47
47
|
export const GDH_AUTHORING_SLICE_REPORT_VERSION = 1;
|
|
48
48
|
export const GDH_MCP_MANIFEST_VERSION = 1;
|
|
49
49
|
export const GDH_CURSOR_RULE_VERSION = 4;
|
|
50
|
-
export const GDH_UPDATE_HOOK_VERSION =
|
|
50
|
+
export const GDH_UPDATE_HOOK_VERSION = 11;
|
|
51
51
|
export const GDH_RUNTIME_RECIPE_RUN_VERSION = 1;
|
|
52
52
|
export const GDH_RUNTIME_RUN_BUNDLE_VERSION = 1;
|
|
53
53
|
export const GDH_RUNTIME_CORPUS_ARTIFACT_VERSION = 1;
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@gdh/adapters": "0.26.
|
|
15
|
-
"@gdh/authoring": "0.26.
|
|
16
|
-
"@gdh/core": "0.26.
|
|
17
|
-
"@gdh/docs": "0.26.
|
|
18
|
-
"@gdh/observability": "0.26.
|
|
19
|
-
"@gdh/scan": "0.26.
|
|
20
|
-
"@gdh/verify": "0.26.
|
|
14
|
+
"@gdh/adapters": "0.26.2",
|
|
15
|
+
"@gdh/authoring": "0.26.2",
|
|
16
|
+
"@gdh/core": "0.26.2",
|
|
17
|
+
"@gdh/docs": "0.26.2",
|
|
18
|
+
"@gdh/observability": "0.26.2",
|
|
19
|
+
"@gdh/scan": "0.26.2",
|
|
20
|
+
"@gdh/verify": "0.26.2",
|
|
21
21
|
"@modelcontextprotocol/sdk": "1.29.0"
|
|
22
22
|
},
|
|
23
|
-
"version": "0.26.
|
|
23
|
+
"version": "0.26.2"
|
|
24
24
|
}
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@gdh/authoring": "0.26.
|
|
15
|
-
"@gdh/core": "0.26.
|
|
16
|
-
"@gdh/docs": "0.26.
|
|
17
|
-
"@gdh/observability": "0.26.
|
|
18
|
-
"@gdh/runtime": "0.26.
|
|
19
|
-
"@gdh/scan": "0.26.
|
|
14
|
+
"@gdh/authoring": "0.26.2",
|
|
15
|
+
"@gdh/core": "0.26.2",
|
|
16
|
+
"@gdh/docs": "0.26.2",
|
|
17
|
+
"@gdh/observability": "0.26.2",
|
|
18
|
+
"@gdh/runtime": "0.26.2",
|
|
19
|
+
"@gdh/scan": "0.26.2",
|
|
20
20
|
"yaml": "^2.8.3"
|
|
21
21
|
},
|
|
22
|
-
"version": "0.26.
|
|
22
|
+
"version": "0.26.2"
|
|
23
23
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillcap/gdh",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.2",
|
|
4
4
|
"description": "Godot-specific authoring and validation harness for agentic development.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -31,17 +31,17 @@
|
|
|
31
31
|
"releaseStage": "broader_internal_release"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@gdh/cli": "0.26.
|
|
34
|
+
"@gdh/cli": "0.26.2",
|
|
35
35
|
"@clack/prompts": "^1.2.0",
|
|
36
|
-
"@gdh/adapters": "0.26.
|
|
37
|
-
"@gdh/authoring": "0.26.
|
|
38
|
-
"@gdh/core": "0.26.
|
|
39
|
-
"@gdh/docs": "0.26.
|
|
40
|
-
"@gdh/mcp": "0.26.
|
|
41
|
-
"@gdh/observability": "0.26.
|
|
42
|
-
"@gdh/runtime": "0.26.
|
|
43
|
-
"@gdh/scan": "0.26.
|
|
44
|
-
"@gdh/verify": "0.26.
|
|
36
|
+
"@gdh/adapters": "0.26.2",
|
|
37
|
+
"@gdh/authoring": "0.26.2",
|
|
38
|
+
"@gdh/core": "0.26.2",
|
|
39
|
+
"@gdh/docs": "0.26.2",
|
|
40
|
+
"@gdh/mcp": "0.26.2",
|
|
41
|
+
"@gdh/observability": "0.26.2",
|
|
42
|
+
"@gdh/runtime": "0.26.2",
|
|
43
|
+
"@gdh/scan": "0.26.2",
|
|
44
|
+
"@gdh/verify": "0.26.2",
|
|
45
45
|
"picocolors": "^1.1.1"
|
|
46
46
|
},
|
|
47
47
|
"bundledDependencies": [
|