@skillcap/gdh 0.19.1 → 0.19.3

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.
Files changed (51) hide show
  1. package/INSTALL-BUNDLE.json +1 -1
  2. package/README.md +1 -1
  3. package/RELEASE-SPAN-UPDATE-CONTRACTS.json +154 -0
  4. package/node_modules/@gdh/adapters/dist/authoring-hook-render.d.ts.map +1 -1
  5. package/node_modules/@gdh/adapters/dist/authoring-hook-render.js +26 -16
  6. package/node_modules/@gdh/adapters/dist/authoring-hook-render.js.map +1 -1
  7. package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
  8. package/node_modules/@gdh/adapters/dist/index.js +122 -18
  9. package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
  10. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts.map +1 -1
  11. package/node_modules/@gdh/adapters/dist/skill-rendering.js +3 -0
  12. package/node_modules/@gdh/adapters/dist/skill-rendering.js.map +1 -1
  13. package/node_modules/@gdh/adapters/package.json +8 -8
  14. package/node_modules/@gdh/authoring/package.json +2 -2
  15. package/node_modules/@gdh/cli/dist/migrate.d.ts.map +1 -1
  16. package/node_modules/@gdh/cli/dist/migrate.js +12 -2
  17. package/node_modules/@gdh/cli/dist/migrate.js.map +1 -1
  18. package/node_modules/@gdh/cli/dist/self-update.d.ts.map +1 -1
  19. package/node_modules/@gdh/cli/dist/self-update.js +5 -3
  20. package/node_modules/@gdh/cli/dist/self-update.js.map +1 -1
  21. package/node_modules/@gdh/cli/dist/setup.d.ts.map +1 -1
  22. package/node_modules/@gdh/cli/dist/setup.js +11 -4
  23. package/node_modules/@gdh/cli/dist/setup.js.map +1 -1
  24. package/node_modules/@gdh/cli/package.json +10 -10
  25. package/node_modules/@gdh/core/dist/index.d.ts +11 -6
  26. package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
  27. package/node_modules/@gdh/core/dist/index.js +6 -6
  28. package/node_modules/@gdh/core/dist/index.js.map +1 -1
  29. package/node_modules/@gdh/core/package.json +1 -1
  30. package/node_modules/@gdh/docs/dist/agent-contract.d.ts +8 -3
  31. package/node_modules/@gdh/docs/dist/agent-contract.d.ts.map +1 -1
  32. package/node_modules/@gdh/docs/dist/agent-contract.js +53 -6
  33. package/node_modules/@gdh/docs/dist/agent-contract.js.map +1 -1
  34. package/node_modules/@gdh/docs/dist/guidance.d.ts.map +1 -1
  35. package/node_modules/@gdh/docs/dist/guidance.js +5 -4
  36. package/node_modules/@gdh/docs/dist/guidance.js.map +1 -1
  37. package/node_modules/@gdh/docs/dist/query.d.ts.map +1 -1
  38. package/node_modules/@gdh/docs/dist/query.js +94 -22
  39. package/node_modules/@gdh/docs/dist/query.js.map +1 -1
  40. package/node_modules/@gdh/docs/package.json +2 -2
  41. package/node_modules/@gdh/mcp/package.json +8 -8
  42. package/node_modules/@gdh/observability/package.json +2 -2
  43. package/node_modules/@gdh/runtime/dist/bridge-surface.js +5 -3
  44. package/node_modules/@gdh/runtime/dist/bridge-surface.js.map +1 -1
  45. package/node_modules/@gdh/runtime/package.json +2 -2
  46. package/node_modules/@gdh/scan/dist/onboard.d.ts.map +1 -1
  47. package/node_modules/@gdh/scan/dist/onboard.js +11 -2
  48. package/node_modules/@gdh/scan/dist/onboard.js.map +1 -1
  49. package/node_modules/@gdh/scan/package.json +3 -3
  50. package/node_modules/@gdh/verify/package.json +7 -7
  51. package/package.json +11 -11
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "product": "GDH",
3
- "version": "0.19.1",
3
+ "version": "0.19.3",
4
4
  "installMode": "packaged_install"
5
5
  }
package/README.md CHANGED
@@ -19,7 +19,7 @@ Then open your agent in that project and run:
19
19
  /gdh-onboard
20
20
  ```
21
21
 
22
- GDH writes the project guidance, agent skill surfaces, MCP config, and local state that supported agents use for future work. Setup records the resolved GDH version in the target project so later updates can migrate that project deliberately.
22
+ GDH writes the project guidance, agent skill surfaces, MCP config, and local state that supported agents use for future work. In monorepos, full guidance and skills stay in the selected Godot project directory while only thin root routing/config surfaces are installed for agents launched from the repo root. Setup records the resolved GDH version in the target project so later updates can migrate that project deliberately.
23
23
 
24
24
  ## Requirements
25
25
 
@@ -1831,6 +1831,160 @@
1831
1831
  }
1832
1832
  ]
1833
1833
  }
1834
+ },
1835
+ {
1836
+ "version": "0.19.2",
1837
+ "releaseTag": "v0.19.2",
1838
+ "migrationStatus": "required",
1839
+ "summary": "v0.19.2 scopes GDH-managed guidance, hooks, skills, Cursor rules, and supporting docs to the configured nested Godot target while keeping monorepo-root agent launches supported through thin pointer guidance and root metadata. Existing targets need `gdh migrate --apply` because GDH_AGENT_CONTRACT_VERSION moves 3 -> 4, GDH_GUIDANCE_INDEX_VERSION moves 3 -> 4, GDH_GUIDANCE_UNIT_VERSION moves 11 -> 12, GDH_CURSOR_RULE_VERSION moves 2 -> 3, GDH_UPDATE_HOOK_VERSION moves 1 -> 2, and GDH_RUNTIME_BRIDGE_SURFACE_VERSION moves 10 -> 11.",
1840
+ "releaseHighlights": {
1841
+ "summary": "v0.19.2 scopes GDH-managed agent guidance, hooks, skills, Cursor rules, and supporting docs to the actual Godot project directory instead of treating a monorepo root as the target surface. This keeps non-game work in a monorepo from loading Godot-specific guidance or firing GDH hooks while still supporting agents and coding harnesses launched from the repository root. The release also fixes a Godot runtime bridge typing issue and keeps the bridge inert when the runtime environment variable is disabled.",
1842
+ "operatorChanges": [
1843
+ "**Target guidance is nested under the Godot project.** GDH writes the full managed `AGENTS.md` contract and generated `docs/agent/` guidance in the target Godot project directory. A monorepo-root `AGENTS.md` is only a thin pointer for Godot/GDH work.",
1844
+ "**Agent adapter surfaces are target-scoped.** Claude hooks, Claude skills, Codex skills, Cursor rules, and related generated docs use target-relative scoping so file edits outside the Godot target do not trigger GDH checks.",
1845
+ "**Monorepo root launch still works.** Root-level project metadata can still point GDH at the nested Godot project, so teams can start agents from the repository root without leaking game-specific instructions into unrelated work.",
1846
+ "**Runtime bridge generation is refreshed.** The managed bridge surface moves to version 11. The bridge script now uses an explicit `Variant` for `JSON.parse_string(...)` and avoids always-on processing when runtime support is disabled."
1847
+ ]
1848
+ },
1849
+ "updateContract": {
1850
+ "summary": "Managed targets need release-specific migration for v0.19.2 because agent contracts, generated guidance, Cursor rules, Claude hooks, shipped skill guidance, and the runtime bridge surface changed to enforce nested Godot target scoping. After self-update, run `gdh migrate --apply` from the monorepo root or target directory so GDH can refresh only the configured Godot target surfaces.",
1851
+ "steps": [
1852
+ {
1853
+ "id": "verify_configured_target_path",
1854
+ "kind": "mechanical",
1855
+ "summary": "Confirm GDH resolves the intended nested Godot target.",
1856
+ "detail": "Run `gdh status` from the monorepo root or target directory and verify the reported target path is the actual Godot project directory, for example `apps/game`, before applying migration.",
1857
+ "commands": [
1858
+ "gdh status"
1859
+ ],
1860
+ "validationCommands": [
1861
+ "gdh status"
1862
+ ]
1863
+ },
1864
+ {
1865
+ "id": "apply_scoped_surface_migration",
1866
+ "kind": "mechanical",
1867
+ "summary": "Refresh nested target guidance, hooks, skills, Cursor rules, and runtime bridge files.",
1868
+ "detail": "Run `gdh migrate --apply` so GDH re-bakes managed target files at the new surface versions. The migration should place full GDH instructions and extra guidance docs under the target project directory while leaving root-level files limited to required metadata and thin routing guidance.",
1869
+ "commands": [
1870
+ "gdh migrate --apply"
1871
+ ],
1872
+ "validationCommands": [
1873
+ "gdh guidance status",
1874
+ "gdh adapters status",
1875
+ "gdh verify drift"
1876
+ ]
1877
+ },
1878
+ {
1879
+ "id": "check_root_instruction_scope",
1880
+ "kind": "agent_reasoning",
1881
+ "summary": "Keep root agent guidance narrow for non-game monorepo work.",
1882
+ "detail": "If the repository root has AGENTS.md or equivalent instruction shims, confirm GDH-managed text only tells agents to read the nested target AGENTS.md for Godot/GDH work. Do not copy the full GDH target contract into the monorepo root.",
1883
+ "commands": [
1884
+ "gdh guidance status"
1885
+ ],
1886
+ "validationCommands": [
1887
+ "gdh verify drift"
1888
+ ]
1889
+ },
1890
+ {
1891
+ "id": "confirm_hooks_ignore_non_target_edits",
1892
+ "kind": "mechanical",
1893
+ "summary": "Confirm generated hooks are gated to the target path.",
1894
+ "detail": "For monorepos with non-game apps or packages, inspect the generated hook status after migration and confirm GDH hooks report no action for file edits outside the configured Godot target directory.",
1895
+ "commands": [
1896
+ "gdh adapters status"
1897
+ ],
1898
+ "validationCommands": [
1899
+ "gdh adapters status",
1900
+ "gdh verify drift"
1901
+ ]
1902
+ },
1903
+ {
1904
+ "id": "verify_runtime_bridge_surface",
1905
+ "kind": "mechanical",
1906
+ "summary": "Refresh the runtime bridge surface only for targets that use GDH runtime support.",
1907
+ "detail": "The bridge surface is versioned with the other managed target files. Projects that use runtime verification should let `gdh migrate --apply` refresh the bridge and then run their normal runtime smoke. When runtime support is disabled by environment, the bridge should remain inert.",
1908
+ "commands": [
1909
+ "gdh migrate --apply"
1910
+ ],
1911
+ "validationCommands": [
1912
+ "gdh status",
1913
+ "gdh verify drift"
1914
+ ]
1915
+ }
1916
+ ]
1917
+ }
1918
+ },
1919
+ {
1920
+ "version": "0.19.3",
1921
+ "releaseTag": "v0.19.3",
1922
+ "migrationStatus": "no_op",
1923
+ "summary": "v0.19.3 repairs the v0.19.2 monorepo update path without changing managed surface version constants. Existing v0.19.2-managed targets do not need a new release-specific migration solely for v0.19.3; projects that were blocked by stale root guidance or `--dry-run --target` parsing should rerun the normal self-update and follow any terminal-state migration instructions.",
1924
+ "releaseHighlights": {
1925
+ "summary": "v0.19.3 repairs the v0.19.2 monorepo update path. It fixes `gdh self-update --dry-run --target <path>` so the target path is not mistaken for a version argument, and it makes lifecycle status inspect the target-local generated guidance directory after nested Godot target scoping. The release also aligns the greenfield runtime bridge fixture manifest with the v0.19.2 runtime bridge surface version so migration and drift tests agree with the shipped bridge contract.",
1926
+ "operatorChanges": [
1927
+ "**`--dry-run --target` update previews work correctly.** Agents can preview an update for a monorepo root with an explicit target path without GDH parsing that path as the requested release version.",
1928
+ "**Nested guidance freshness checks use the configured target.** Projects that already have stale root `docs/agent/` copies from older GDH versions no longer get stuck in `migration_needed` when the current canonical guidance lives under the configured Godot target.",
1929
+ "**Missing target-local guidance is repairable.** `gdh migrate --apply` can recreate target-local generated guidance while ignoring stale root duplicates that are no longer canonical for nested Godot targets.",
1930
+ "**Runtime bridge fixture truth is aligned.** The greenfield fixture manifest declares runtime bridge surface v11, matching the v0.19.2 generated bridge files."
1931
+ ]
1932
+ },
1933
+ "updateContract": {
1934
+ "summary": "v0.19.3 is a no-op managed-surface release. Use the normal self-update flow; if a target still reports follow-up work from v0.19.2, run the migration command reported by GDH and verify status/drift from the monorepo root or configured Godot target.",
1935
+ "steps": [
1936
+ {
1937
+ "id": "preview_update_with_target",
1938
+ "kind": "mechanical",
1939
+ "summary": "Preview the update from the monorepo root or configured target.",
1940
+ "detail": "Run the normal update preview. If using an explicit target path, `--dry-run --target <path>` is now parsed correctly and the path is not treated as a version.",
1941
+ "commands": [
1942
+ "gdh self-update --dry-run"
1943
+ ],
1944
+ "validationCommands": [
1945
+ "gdh self-update --dry-run"
1946
+ ]
1947
+ },
1948
+ {
1949
+ "id": "apply_self_update",
1950
+ "kind": "mechanical",
1951
+ "summary": "Apply the self-update and follow GDH terminal-state instructions.",
1952
+ "detail": "Run `gdh self-update`. v0.19.3 itself does not introduce new managed surface versions, but a target that still needs v0.19.2 migration may report `follow_up_required`.",
1953
+ "commands": [
1954
+ "gdh self-update"
1955
+ ],
1956
+ "validationCommands": [
1957
+ "gdh status"
1958
+ ]
1959
+ },
1960
+ {
1961
+ "id": "run_follow_up_migration_if_reported",
1962
+ "kind": "mechanical",
1963
+ "summary": "Run migration only when GDH reports follow-up work.",
1964
+ "detail": "If `gdh self-update` or `gdh status` reports migration follow-up, run `gdh migrate --apply`. Lifecycle checks now use the target-local guidance root and should not be blocked by stale root `docs/agent/` copies.",
1965
+ "commands": [
1966
+ "gdh migrate --apply"
1967
+ ],
1968
+ "validationCommands": [
1969
+ "gdh status",
1970
+ "gdh verify drift"
1971
+ ]
1972
+ },
1973
+ {
1974
+ "id": "check_stale_root_guidance_policy",
1975
+ "kind": "agent_reasoning",
1976
+ "summary": "Decide what to do with old root guidance duplicates.",
1977
+ "detail": "For nested Godot targets, old root `docs/agent/` copies are no longer canonical. GDH ignores them for lifecycle freshness, but repository owners should remove or archive stale tracked duplicates only when that matches their repo policy.",
1978
+ "commands": [
1979
+ "gdh guidance status"
1980
+ ],
1981
+ "validationCommands": [
1982
+ "gdh status",
1983
+ "gdh verify drift"
1984
+ ]
1985
+ }
1986
+ ]
1987
+ }
1834
1988
  }
1835
1989
  ]
1836
1990
  }
@@ -1 +1 @@
1
- {"version":3,"file":"authoring-hook-render.d.ts","sourceRoot":"","sources":["../src/authoring-hook-render.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mCAAmC,yCAAyC,CAAC;AAC1F,eAAO,MAAM,kCAAkC,wCAAwC,CAAC;AACxF,eAAO,MAAM,6BAA6B,uRAC4O,CAAC;AACvR,eAAO,MAAM,4BAA4B,qRAC2O,CAAC;AAErR,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;CACpC,GAAG,MAAM,CA+IT"}
1
+ {"version":3,"file":"authoring-hook-render.d.ts","sourceRoot":"","sources":["../src/authoring-hook-render.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mCAAmC,yCAAyC,CAAC;AAC1F,eAAO,MAAM,kCAAkC,wCAAwC,CAAC;AACxF,eAAO,MAAM,6BAA6B,uRAC4O,CAAC;AACvR,eAAO,MAAM,4BAA4B,qRAC2O,CAAC;AAErR,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;CACpC,GAAG,MAAM,CAyJT"}
@@ -51,7 +51,7 @@ export function renderGdhAuthoringHook(input) {
51
51
  "",
52
52
  "function handleStop(input, targetRoot) {",
53
53
  " const state = readDirtyState(targetRoot);",
54
- " const dirtyFiles = unique(state.dirtyFiles || []);",
54
+ " const dirtyFiles = sanitizeDirtyFiles(state.dirtyFiles || []);",
55
55
  " if (dirtyFiles.length === 0) return allow();",
56
56
  " const result = runGdh(targetRoot, ['authoring', 'check', '--target', targetRoot, '--mode', 'final', '--format', 'compact']);",
57
57
  " if (result.ok && /Completion allowed\\./.test(result.output)) {",
@@ -76,22 +76,23 @@ export function renderGdhAuthoringHook(input) {
76
76
  "}",
77
77
  "",
78
78
  "function collectChangedFiles(input, targetRoot) {",
79
+ " const baseCwd = input && typeof input.cwd === 'string' ? input.cwd : process.cwd();",
79
80
  " const files = [];",
80
- " addFile(files, input.file_path, targetRoot);",
81
- " addFromToolPayload(files, input.tool_input, targetRoot);",
82
- " addFromToolPayload(files, input.tool_response, targetRoot);",
81
+ " addFile(files, input.file_path, targetRoot, baseCwd);",
82
+ " addFromToolPayload(files, input.tool_input, targetRoot, baseCwd);",
83
+ " addFromToolPayload(files, input.tool_response, targetRoot, baseCwd);",
83
84
  " const command = input && input.tool_input && typeof input.tool_input.command === 'string' ? input.tool_input.command : '';",
84
- " for (const file of parsePatchFileNames(command)) addFile(files, file, targetRoot);",
85
+ " for (const file of parsePatchFileNames(command)) addFile(files, file, targetRoot, baseCwd);",
85
86
  " return unique(files);",
86
87
  "}",
87
88
  "",
88
- "function addFromToolPayload(files, payload, targetRoot) {",
89
+ "function addFromToolPayload(files, payload, targetRoot, baseCwd) {",
89
90
  " if (!payload || typeof payload !== 'object') return;",
90
- " addFile(files, payload.file_path, targetRoot);",
91
- " addFile(files, payload.filePath, targetRoot);",
92
- " addFile(files, payload.path, targetRoot);",
93
- " if (Array.isArray(payload.file_paths)) for (const file of payload.file_paths) addFile(files, file, targetRoot);",
94
- " if (Array.isArray(payload.files)) for (const file of payload.files) addFile(files, file, targetRoot);",
91
+ " addFile(files, payload.file_path, targetRoot, baseCwd);",
92
+ " addFile(files, payload.filePath, targetRoot, baseCwd);",
93
+ " addFile(files, payload.path, targetRoot, baseCwd);",
94
+ " if (Array.isArray(payload.file_paths)) for (const file of payload.file_paths) addFile(files, file, targetRoot, baseCwd);",
95
+ " if (Array.isArray(payload.files)) for (const file of payload.files) addFile(files, file, targetRoot, baseCwd);",
95
96
  "}",
96
97
  "",
97
98
  "function parsePatchFileNames(command) {",
@@ -102,19 +103,27 @@ export function renderGdhAuthoringHook(input) {
102
103
  " return files;",
103
104
  "}",
104
105
  "",
105
- "function addFile(files, value, targetRoot) {",
106
+ "function addFile(files, value, targetRoot, baseCwd) {",
106
107
  " if (typeof value !== 'string' || value.trim() === '') return;",
107
- " const normalized = normalizeToTargetRelative(value.trim(), targetRoot);",
108
+ " const normalized = normalizeToTargetRelative(value.trim(), targetRoot, baseCwd);",
108
109
  " if (normalized) files.push(normalized);",
109
110
  "}",
110
111
  "",
111
- "function normalizeToTargetRelative(value, targetRoot) {",
112
+ "function normalizeToTargetRelative(value, targetRoot, baseCwd) {",
112
113
  " if (value.startsWith('res://')) return value.slice('res://'.length);",
113
- " const absolute = path.isAbsolute(value) ? path.resolve(value) : path.resolve(targetRoot, value);",
114
- " const relative = path.relative(targetRoot, absolute);",
114
+ " const canonicalTargetRoot = canonicalPath(targetRoot);",
115
+ " const canonicalBaseCwd = canonicalPath(baseCwd || targetRoot);",
116
+ " const absolute = path.isAbsolute(value) ? canonicalPath(value) : path.resolve(canonicalBaseCwd, value);",
117
+ " const relative = path.relative(canonicalTargetRoot, absolute);",
118
+ " if ((relative.startsWith('..') || path.isAbsolute(relative)) && !path.isAbsolute(value) && isInside(canonicalTargetRoot, canonicalBaseCwd)) {",
119
+ " const fallbackRelative = path.relative(canonicalTargetRoot, path.resolve(canonicalTargetRoot, value));",
120
+ " if (!fallbackRelative.startsWith('..') && !path.isAbsolute(fallbackRelative)) return fallbackRelative.split(path.sep).join('/');",
121
+ " }",
115
122
  " if (relative.startsWith('..') || path.isAbsolute(relative)) return null;",
116
123
  " return relative.split(path.sep).join('/');",
117
124
  "}",
125
+ "function isInside(root, candidate) { const rel = path.relative(root, path.resolve(candidate)); return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel)); }",
126
+ "function canonicalPath(value) { try { return fs.realpathSync.native ? fs.realpathSync.native(value) : fs.realpathSync(value); } catch { return path.resolve(value); } }",
118
127
  "",
119
128
  "function isAuthoringPath(file) {",
120
129
  " if (file === 'project.godot' || file.endsWith('/project.godot')) return true;",
@@ -133,6 +142,7 @@ export function renderGdhAuthoringHook(input) {
133
142
  "function readDirtyState(targetRoot) { try { return JSON.parse(fs.readFileSync(dirtyStatePath(targetRoot), 'utf8')); } catch { return { dirtyFiles: [], lastBlockedHash: null }; } }",
134
143
  "function writeDirtyState(targetRoot, state) { const file = dirtyStatePath(targetRoot); fs.mkdirSync(path.dirname(file), { recursive: true }); fs.writeFileSync(file, `${JSON.stringify(state, null, 2)}\\n`, 'utf8'); }",
135
144
  "function clearDirtyState(targetRoot) { try { fs.rmSync(dirtyStatePath(targetRoot), { force: true }); } catch {} }",
145
+ "function sanitizeDirtyFiles(values) { return unique(values).filter((file) => typeof file === 'string' && file !== '' && !file.startsWith('../') && !path.isAbsolute(file) && isAuthoringPath(file)); }",
136
146
  "function unique(values) { return [...new Set(values.filter(Boolean))].sort(); }",
137
147
  "function hash(value) { return crypto.createHash('sha256').update(value).digest('hex'); }",
138
148
  "function readHookInput() { try { return JSON.parse(fs.readFileSync(0, 'utf8') || '{}'); } catch { return {}; } }",
@@ -1 +1 @@
1
- {"version":3,"file":"authoring-hook-render.js","sourceRoot":"","sources":["../src/authoring-hook-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,CAAC,MAAM,mCAAmC,GAAG,sCAAsC,CAAC;AAC1F,MAAM,CAAC,MAAM,kCAAkC,GAAG,qCAAqC,CAAC;AACxF,MAAM,CAAC,MAAM,6BAA6B,GACxC,oRAAoR,CAAC;AACvR,MAAM,CAAC,MAAM,4BAA4B,GACvC,kRAAkR,CAAC;AAErR,MAAM,UAAU,sBAAsB,CAAC,KAItC;IACC,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,8DAA8D;QAC9D,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG;QAChE,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG;QAC3E,iBAAiB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;QAC/C,EAAE;QACF,2BAA2B;QAC3B,+BAA+B;QAC/B,mCAAmC;QACnC,iDAAiD;QACjD,EAAE;QACF,kEAAkE;QAClE,yBAAyB;QACzB,EAAE;QACF,SAAS;QACT,EAAE;QACF,mBAAmB;QACnB,kCAAkC;QAClC,gDAAgD;QAChD,0DAA0D;QAC1D,8BAA8B;QAC9B,oCAAoC;QACpC,6GAA6G;QAC7G,mEAAmE;QACnE,mBAAmB;QACnB,GAAG;QACH,EAAE;QACF,8CAA8C;QAC9C,2DAA2D;QAC3D,sDAAsD;QACtD,+CAA+C;QAC/C,6CAA6C;QAC7C,2EAA2E;QAC3E,qIAAqI;QACrI,0GAA0G;QAC1G,4CAA4C;QAC5C,sLAAsL;QACtL,qEAAqE;QACrE,8HAA8H;QAC9H,KAAK;QACL,mBAAmB;QACnB,GAAG;QACH,EAAE;QACF,0CAA0C;QAC1C,6CAA6C;QAC7C,sDAAsD;QACtD,gDAAgD;QAChD,gIAAgI;QAChI,mEAAmE;QACnE,kCAAkC;QAClC,qBAAqB;QACrB,KAAK;QACL,uDAAuD;QACvD,+FAA+F;QAC/F,iHAAiH;QACjH,kLAAkL;QAClL,GAAG;QACH,EAAE;QACF,qCAAqC;QACrC,yFAAyF;QACzF,sBAAsB;QACtB,uBAAuB;QACvB,wBAAwB;QACxB,sBAAsB;QACtB,OAAO;QACP,yEAAyE;QACzE,wHAAwH;QACxH,GAAG;QACH,EAAE;QACF,mDAAmD;QACnD,qBAAqB;QACrB,gDAAgD;QAChD,4DAA4D;QAC5D,+DAA+D;QAC/D,8HAA8H;QAC9H,sFAAsF;QACtF,yBAAyB;QACzB,GAAG;QACH,EAAE;QACF,2DAA2D;QAC3D,wDAAwD;QACxD,kDAAkD;QAClD,iDAAiD;QACjD,6CAA6C;QAC7C,mHAAmH;QACnH,yGAAyG;QACzG,GAAG;QACH,EAAE;QACF,yCAAyC;QACzC,qBAAqB;QACrB,qEAAqE;QACrE,cAAc;QACd,iFAAiF;QACjF,iBAAiB;QACjB,GAAG;QACH,EAAE;QACF,8CAA8C;QAC9C,iEAAiE;QACjE,2EAA2E;QAC3E,2CAA2C;QAC3C,GAAG;QACH,EAAE;QACF,yDAAyD;QACzD,wEAAwE;QACxE,oGAAoG;QACpG,yDAAyD;QACzD,4EAA4E;QAC5E,8CAA8C;QAC9C,GAAG;QACH,EAAE;QACF,kCAAkC;QAClC,iFAAiF;QACjF,sEAAsE;QACtE,GAAG;QACH,EAAE;QACF,qCAAqC;QACrC,qDAAqD;QACrD,uEAAuE;QACvE,qDAAqD;QACrD,iEAAiE;QACjE,yBAAyB;QACzB,GAAG;QACH,EAAE;QACF,4HAA4H;QAC5H,qLAAqL;QACrL,yNAAyN;QACzN,mHAAmH;QACnH,iFAAiF;QACjF,0FAA0F;QAC1F,kHAAkH;QAClH,EAAE;QACF,uCAAuC;QACvC,0BAA0B;QAC1B,kDAAkD;QAClD,oHAAoH;QACpH,0DAA0D;QAC1D,oBAAoB;QACpB,GAAG;QACH,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"authoring-hook-render.js","sourceRoot":"","sources":["../src/authoring-hook-render.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -245,8 +245,8 @@ export async function inspectProjectLifecycleCompatibility(targetPath) {
245
245
  await inspectVerificationScenarioLifecycleSurface(resolvedTargetPath),
246
246
  await inspectRulesLifecycleSurface(resolvedTargetPath, projectConfig),
247
247
  inspectAgentContractLifecycleSurface(resolvedTargetPath, guidanceStatus),
248
- await inspectGuidanceIndexLifecycleSurface(resolvedTargetPath),
249
- await inspectGuidanceUnitLifecycleSurface(resolvedTargetPath, projectConfig),
248
+ await inspectGuidanceIndexLifecycleSurface(guidanceStatus.guidanceRootPath, resolvedTargetPath),
249
+ await inspectGuidanceUnitLifecycleSurface(guidanceStatus.guidanceRootPath, projectConfig, resolvedTargetPath),
250
250
  inspectMcpManifestLifecycleSurface(resolvedTargetPath, projectConfig.mcp.enabled, adapterStatus),
251
251
  inspectCursorRuleLifecycleSurface(resolvedTargetPath, adapterStatus),
252
252
  inspectRuntimeBridgeLifecycleSurface(resolvedTargetPath, bridgeStatus),
@@ -317,8 +317,9 @@ export function renderCursorRule() {
317
317
  `<!-- GDH CURSOR RULE VERSION: ${GDH_CURSOR_RULE_VERSION} -->`,
318
318
  "# GDH Cursor Rule",
319
319
  "",
320
- "This repository uses GDH.",
321
- "Follow the canonical repo-local entrypoint in [AGENTS.md](../../AGENTS.md), then load the canonical guidance index at [docs/agent/README.md](../../docs/agent/README.md) before substantive work.",
320
+ "This GDH-managed Godot target uses GDH.",
321
+ "Apply this rule only for files inside this Godot target or when the user explicitly asks for GDH work on this target.",
322
+ "Follow the canonical target-local entrypoint in [AGENTS.md](../../AGENTS.md), then load the canonical guidance index at [docs/agent/README.md](../../docs/agent/README.md) before substantive Godot work.",
322
323
  "For runtime bridge usage, load [docs/agent/authoring-and-validation.md](../../docs/agent/authoring-and-validation.md) and follow its runtime bridge section.",
323
324
  "Do not duplicate or override the canonical GDH guidance chain here.",
324
325
  "",
@@ -1126,7 +1127,7 @@ async function planInstallActions(targetPath, adapters, requestedAgents, options
1126
1127
  continue;
1127
1128
  }
1128
1129
  if (adapter.agent === "claude") {
1129
- actions.push(...planClaudeInstallActions(targetPath, adapter, options.pinnedVersion));
1130
+ actions.push(...planClaudeInstallActions(targetPath, adapter, options.pinnedVersion, options.integrationRootPath));
1130
1131
  continue;
1131
1132
  }
1132
1133
  if (adapter.agent === "cursor") {
@@ -1471,7 +1472,7 @@ function planCodexUserInstallActions(targetPath, projectMcp, integrationRootPath
1471
1472
  }));
1472
1473
  return actions;
1473
1474
  }
1474
- function planClaudeInstallActions(targetPath, adapter, pinnedVersion) {
1475
+ function planClaudeInstallActions(targetPath, adapter, pinnedVersion, integrationRootPath) {
1475
1476
  const actions = [];
1476
1477
  const claudeSurface = adapter.surfaces.find((surface) => surface.relativePath === CLAUDE_SHIM_RELATIVE_PATH);
1477
1478
  if (!claudeSurface || claudeSurface.state === "ready") {
@@ -1515,6 +1516,30 @@ function planClaudeInstallActions(targetPath, adapter, pinnedVersion) {
1515
1516
  targetRelativePath: ".",
1516
1517
  agent: "claude",
1517
1518
  }), "authoring guard", pinnedVersion));
1519
+ if (path.resolve(integrationRootPath) !== path.resolve(targetPath)) {
1520
+ const rootTargetRelativePath = path.relative(integrationRootPath, targetPath) || ".";
1521
+ actions.push(planDirectSymlinkAction({
1522
+ agent: "claude",
1523
+ targetPath: integrationRootPath,
1524
+ relativePath: CLAUDE_SHIM_RELATIVE_PATH,
1525
+ expectedTarget: "AGENTS.md",
1526
+ readySummary: "Root CLAUDE.md already points to the thin root AGENTS.md router.",
1527
+ createSummary: "Create root CLAUDE.md as a symlink to the thin root AGENTS.md router.",
1528
+ replaceSummary: "Replace root CLAUDE.md with a symlink to the thin root AGENTS.md router.",
1529
+ }), planDirectWriteFileAction({
1530
+ agent: "claude",
1531
+ targetPath: integrationRootPath,
1532
+ relativePath: CLAUDE_AUTHORING_HOOK_RELATIVE_PATH,
1533
+ content: renderGdhAuthoringHook({
1534
+ pinnedVersion,
1535
+ targetRelativePath: rootTargetRelativePath,
1536
+ agent: "claude",
1537
+ }),
1538
+ readySummary: "Root-launched Claude authoring hook already matches the managed target-scoped hook.",
1539
+ createSummary: "Create the root-launched Claude authoring hook with target-scoped filtering.",
1540
+ replaceSummary: "Replace the root-launched Claude authoring hook with the target-scoped managed hook.",
1541
+ }), planRootClaudeAuthoringSettingsAction(integrationRootPath));
1542
+ }
1518
1543
  // .claude/settings.json composite patch action.
1519
1544
  // - Plan 02 (Strategy A, planner-lock #1): patch-merge the SessionStart
1520
1545
  // hook entry by exact command-literal match, preserving siblings.
@@ -1530,7 +1555,7 @@ function planClaudeInstallActions(targetPath, adapter, pinnedVersion) {
1530
1555
  // commutative (proven in Task 1 Test J) so application order is irrelevant.
1531
1556
  let existingSettingsContent = "";
1532
1557
  try {
1533
- existingSettingsContent = fsSync.readFileSync(path.join(targetPath, CLAUDE_SETTINGS_RELATIVE_PATH), "utf8");
1558
+ existingSettingsContent = fsSync.readFileSync(path.resolve(targetPath, CLAUDE_SETTINGS_RELATIVE_PATH), "utf8");
1534
1559
  }
1535
1560
  catch {
1536
1561
  existingSettingsContent = "";
@@ -1556,6 +1581,83 @@ function planClaudeInstallActions(targetPath, adapter, pinnedVersion) {
1556
1581
  actions.push(...planLegacyClaudeCommandCleanupActions(targetPath));
1557
1582
  return actions;
1558
1583
  }
1584
+ function planDirectSymlinkAction(input) {
1585
+ const absolutePath = path.resolve(input.targetPath, input.relativePath);
1586
+ let present = false;
1587
+ let ready = false;
1588
+ try {
1589
+ const stat = fsSync.lstatSync(absolutePath);
1590
+ present = true;
1591
+ ready = stat.isSymbolicLink() && fsSync.readlinkSync(absolutePath) === input.expectedTarget;
1592
+ }
1593
+ catch {
1594
+ present = false;
1595
+ }
1596
+ return createInstallAction({
1597
+ agent: input.agent,
1598
+ kind: "ensure_symlink",
1599
+ scope: "repo",
1600
+ targetPath: input.targetPath,
1601
+ relativePath: input.relativePath,
1602
+ state: ready ? "unchanged" : "planned",
1603
+ mode: ready ? "unchanged" : present ? "replace" : "create",
1604
+ summary: ready ? input.readySummary : present ? input.replaceSummary : input.createSummary,
1605
+ expectedTarget: input.expectedTarget,
1606
+ });
1607
+ }
1608
+ function planDirectWriteFileAction(input) {
1609
+ const absolutePath = path.resolve(input.targetPath, input.relativePath);
1610
+ let existingContent = null;
1611
+ try {
1612
+ existingContent = fsSync.readFileSync(absolutePath, "utf8");
1613
+ }
1614
+ catch {
1615
+ existingContent = null;
1616
+ }
1617
+ const ready = existingContent === input.content;
1618
+ return createInstallAction({
1619
+ agent: input.agent,
1620
+ kind: "write_file",
1621
+ scope: "repo",
1622
+ targetPath: input.targetPath,
1623
+ relativePath: input.relativePath,
1624
+ state: ready ? "unchanged" : "planned",
1625
+ mode: ready ? "unchanged" : existingContent === null ? "create" : "replace",
1626
+ summary: ready
1627
+ ? input.readySummary
1628
+ : existingContent === null
1629
+ ? input.createSummary
1630
+ : input.replaceSummary,
1631
+ content: input.content,
1632
+ });
1633
+ }
1634
+ function planRootClaudeAuthoringSettingsAction(integrationRootPath) {
1635
+ const absolutePath = path.join(integrationRootPath, CLAUDE_SETTINGS_RELATIVE_PATH);
1636
+ let existingSettingsContent = "";
1637
+ try {
1638
+ existingSettingsContent = fsSync.readFileSync(absolutePath, "utf8");
1639
+ }
1640
+ catch {
1641
+ existingSettingsContent = "";
1642
+ }
1643
+ const patchedSettings = patchClaudeSettingsForGdhAuthoringHooks(existingSettingsContent);
1644
+ const ready = existingSettingsContent === patchedSettings;
1645
+ return createInstallAction({
1646
+ agent: "claude",
1647
+ kind: "write_file",
1648
+ scope: "repo",
1649
+ targetPath: integrationRootPath,
1650
+ relativePath: CLAUDE_SETTINGS_RELATIVE_PATH,
1651
+ state: ready ? "unchanged" : "planned",
1652
+ mode: ready ? "unchanged" : existingSettingsContent.length > 0 ? "replace" : "create",
1653
+ summary: ready
1654
+ ? "Root-launched Claude authoring hooks are already registered with target-scoped filtering."
1655
+ : existingSettingsContent.length > 0
1656
+ ? "Register root-launched Claude authoring hooks while preserving sibling settings."
1657
+ : "Create root .claude/settings.json with target-scoped authoring hooks.",
1658
+ content: patchedSettings,
1659
+ });
1660
+ }
1559
1661
  function planCursorInstallActions(targetPath, adapter, pinnedVersion) {
1560
1662
  const actions = [];
1561
1663
  const cursorRuleSurface = adapter.surfaces.find((surface) => surface.relativePath === CURSOR_RULE_RELATIVE_PATH);
@@ -2218,7 +2320,7 @@ function inspectAgentContractLifecycleSurface(targetPath, guidanceStatus) {
2218
2320
  const status = guidanceStatus.agentContract;
2219
2321
  const probes = [
2220
2322
  createVersionProbe({
2221
- targetPath,
2323
+ targetPath: path.dirname(status.absolutePath),
2222
2324
  relativePath: status.relativePath,
2223
2325
  present: status.present,
2224
2326
  expectedVersion: GDH_AGENT_CONTRACT_VERSION,
@@ -2258,13 +2360,15 @@ function inspectAgentContractLifecycleSurface(targetPath, guidanceStatus) {
2258
2360
  },
2259
2361
  });
2260
2362
  }
2261
- async function inspectGuidanceIndexLifecycleSurface(targetPath) {
2363
+ async function inspectGuidanceIndexLifecycleSurface(guidanceRootPath, commandTargetPath = guidanceRootPath) {
2262
2364
  const relativePath = "docs/agent/README.md";
2263
- const content = await fs.readFile(path.join(targetPath, relativePath), "utf8").catch(() => null);
2365
+ const content = await fs
2366
+ .readFile(path.join(guidanceRootPath, relativePath), "utf8")
2367
+ .catch(() => null);
2264
2368
  const detectedVersion = readTaggedVersion(content, /<!-- GDH GUIDANCE INDEX VERSION: (\d+) -->/);
2265
2369
  const probes = [
2266
2370
  createVersionProbe({
2267
- targetPath,
2371
+ targetPath: guidanceRootPath,
2268
2372
  relativePath,
2269
2373
  present: content !== null,
2270
2374
  expectedVersion: GDH_GUIDANCE_INDEX_VERSION,
@@ -2282,7 +2386,7 @@ async function inspectGuidanceIndexLifecycleSurface(targetPath) {
2282
2386
  action: {
2283
2387
  kind: "apply_migration",
2284
2388
  summary: "Run GDH migrate to create the default guidance index for this target.",
2285
- command: migrateApplyCommand(targetPath),
2389
+ command: migrateApplyCommand(commandTargetPath),
2286
2390
  autoApplicable: true,
2287
2391
  },
2288
2392
  });
@@ -2308,20 +2412,20 @@ async function inspectGuidanceIndexLifecycleSurface(targetPath) {
2308
2412
  action: {
2309
2413
  kind: "apply_migration",
2310
2414
  summary: "Run GDH migrate to regenerate the guidance index with updated content.",
2311
- command: migrateApplyCommand(targetPath),
2415
+ command: migrateApplyCommand(commandTargetPath),
2312
2416
  autoApplicable: true,
2313
2417
  },
2314
2418
  });
2315
2419
  }
2316
- async function inspectGuidanceUnitLifecycleSurface(targetPath, projectConfig) {
2420
+ async function inspectGuidanceUnitLifecycleSurface(guidanceRootPath, projectConfig, commandTargetPath = guidanceRootPath) {
2317
2421
  const expectedUnits = projectConfig === null ? [] : createDefaultGuidanceUnits(projectConfig);
2318
2422
  const probes = [];
2319
2423
  for (const unit of expectedUnits) {
2320
2424
  const content = await fs
2321
- .readFile(path.join(targetPath, unit.relativePath), "utf8")
2425
+ .readFile(path.join(guidanceRootPath, unit.relativePath), "utf8")
2322
2426
  .catch(() => null);
2323
2427
  probes.push(createVersionProbe({
2324
- targetPath,
2428
+ targetPath: guidanceRootPath,
2325
2429
  relativePath: unit.relativePath,
2326
2430
  present: content !== null,
2327
2431
  expectedVersion: GDH_GUIDANCE_UNIT_VERSION,
@@ -2365,7 +2469,7 @@ async function inspectGuidanceUnitLifecycleSurface(targetPath, projectConfig) {
2365
2469
  action: {
2366
2470
  kind: "apply_migration",
2367
2471
  summary: "Run GDH migrate to create the missing default guidance unit files.",
2368
- command: migrateApplyCommand(targetPath),
2472
+ command: migrateApplyCommand(commandTargetPath),
2369
2473
  autoApplicable: true,
2370
2474
  },
2371
2475
  });
@@ -2380,7 +2484,7 @@ async function inspectGuidanceUnitLifecycleSurface(targetPath, projectConfig) {
2380
2484
  action: {
2381
2485
  kind: "apply_migration",
2382
2486
  summary: "Run GDH migrate to regenerate guidance units with updated content.",
2383
- command: migrateApplyCommand(targetPath),
2487
+ command: migrateApplyCommand(commandTargetPath),
2384
2488
  autoApplicable: true,
2385
2489
  },
2386
2490
  });