@skillcap/gdh 0.22.0 → 0.24.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.
Files changed (150) hide show
  1. package/INSTALL-BUNDLE.json +1 -1
  2. package/RELEASE-SPAN-UPDATE-CONTRACTS.json +129 -0
  3. package/node_modules/@gdh/adapters/dist/authoring-hook-render.d.ts.map +1 -1
  4. package/node_modules/@gdh/adapters/dist/authoring-hook-render.js +9 -2
  5. package/node_modules/@gdh/adapters/dist/authoring-hook-render.js.map +1 -1
  6. package/node_modules/@gdh/adapters/dist/claude-statusline-render.d.ts.map +1 -1
  7. package/node_modules/@gdh/adapters/dist/claude-statusline-render.js +2 -1
  8. package/node_modules/@gdh/adapters/dist/claude-statusline-render.js.map +1 -1
  9. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.d.ts.map +1 -1
  10. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.js +2 -1
  11. package/node_modules/@gdh/adapters/dist/claude-update-hook-render.js.map +1 -1
  12. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.d.ts.map +1 -1
  13. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.js +2 -1
  14. package/node_modules/@gdh/adapters/dist/claude-update-worker-render.js.map +1 -1
  15. package/node_modules/@gdh/adapters/dist/deferred-actions-advisory.d.ts +71 -0
  16. package/node_modules/@gdh/adapters/dist/deferred-actions-advisory.d.ts.map +1 -0
  17. package/node_modules/@gdh/adapters/dist/deferred-actions-advisory.js +89 -0
  18. package/node_modules/@gdh/adapters/dist/deferred-actions-advisory.js.map +1 -0
  19. package/node_modules/@gdh/adapters/dist/durable-backup.d.ts +209 -0
  20. package/node_modules/@gdh/adapters/dist/durable-backup.d.ts.map +1 -0
  21. package/node_modules/@gdh/adapters/dist/durable-backup.js +346 -0
  22. package/node_modules/@gdh/adapters/dist/durable-backup.js.map +1 -0
  23. package/node_modules/@gdh/adapters/dist/index.d.ts +10 -1
  24. package/node_modules/@gdh/adapters/dist/index.d.ts.map +1 -1
  25. package/node_modules/@gdh/adapters/dist/index.js +24 -2
  26. package/node_modules/@gdh/adapters/dist/index.js.map +1 -1
  27. package/node_modules/@gdh/adapters/dist/inventory-sweep.d.ts +53 -0
  28. package/node_modules/@gdh/adapters/dist/inventory-sweep.d.ts.map +1 -0
  29. package/node_modules/@gdh/adapters/dist/inventory-sweep.js +98 -0
  30. package/node_modules/@gdh/adapters/dist/inventory-sweep.js.map +1 -0
  31. package/node_modules/@gdh/adapters/dist/process-orchestration.d.ts +223 -0
  32. package/node_modules/@gdh/adapters/dist/process-orchestration.d.ts.map +1 -0
  33. package/node_modules/@gdh/adapters/dist/process-orchestration.js +368 -0
  34. package/node_modules/@gdh/adapters/dist/process-orchestration.js.map +1 -0
  35. package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts +157 -14
  36. package/node_modules/@gdh/adapters/dist/self-update-mechanics.d.ts.map +1 -1
  37. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js +570 -89
  38. package/node_modules/@gdh/adapters/dist/self-update-mechanics.js.map +1 -1
  39. package/node_modules/@gdh/adapters/dist/skill-rendering.d.ts.map +1 -1
  40. package/node_modules/@gdh/adapters/dist/skill-rendering.js +25 -0
  41. package/node_modules/@gdh/adapters/dist/skill-rendering.js.map +1 -1
  42. package/node_modules/@gdh/adapters/package.json +8 -8
  43. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.d.ts +112 -0
  44. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.d.ts.map +1 -0
  45. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.js +264 -0
  46. package/node_modules/@gdh/authoring/dist/diagnostics-broker-contract.js.map +1 -0
  47. package/node_modules/@gdh/authoring/dist/diagnostics-broker.d.ts +92 -0
  48. package/node_modules/@gdh/authoring/dist/diagnostics-broker.d.ts.map +1 -0
  49. package/node_modules/@gdh/authoring/dist/diagnostics-broker.js +532 -0
  50. package/node_modules/@gdh/authoring/dist/diagnostics-broker.js.map +1 -0
  51. package/node_modules/@gdh/authoring/dist/index.d.ts +1 -0
  52. package/node_modules/@gdh/authoring/dist/index.d.ts.map +1 -1
  53. package/node_modules/@gdh/authoring/dist/index.js +1 -0
  54. package/node_modules/@gdh/authoring/dist/index.js.map +1 -1
  55. package/node_modules/@gdh/authoring/dist/lsp-client.d.ts +16 -0
  56. package/node_modules/@gdh/authoring/dist/lsp-client.d.ts.map +1 -1
  57. package/node_modules/@gdh/authoring/dist/lsp-client.js +24 -0
  58. package/node_modules/@gdh/authoring/dist/lsp-client.js.map +1 -1
  59. package/node_modules/@gdh/authoring/dist/lsp.d.ts.map +1 -1
  60. package/node_modules/@gdh/authoring/dist/lsp.js +123 -2
  61. package/node_modules/@gdh/authoring/dist/lsp.js.map +1 -1
  62. package/node_modules/@gdh/authoring/package.json +2 -2
  63. package/node_modules/@gdh/cli/dist/index.d.ts +9 -0
  64. package/node_modules/@gdh/cli/dist/index.d.ts.map +1 -1
  65. package/node_modules/@gdh/cli/dist/index.js +423 -5
  66. package/node_modules/@gdh/cli/dist/index.js.map +1 -1
  67. package/node_modules/@gdh/cli/dist/migrate.d.ts +152 -1
  68. package/node_modules/@gdh/cli/dist/migrate.d.ts.map +1 -1
  69. package/node_modules/@gdh/cli/dist/migrate.js +295 -9
  70. package/node_modules/@gdh/cli/dist/migrate.js.map +1 -1
  71. package/node_modules/@gdh/cli/dist/self-update.d.ts +14 -0
  72. package/node_modules/@gdh/cli/dist/self-update.d.ts.map +1 -1
  73. package/node_modules/@gdh/cli/dist/self-update.js +197 -15
  74. package/node_modules/@gdh/cli/dist/self-update.js.map +1 -1
  75. package/node_modules/@gdh/cli/package.json +10 -10
  76. package/node_modules/@gdh/core/dist/index.d.ts +209 -6
  77. package/node_modules/@gdh/core/dist/index.d.ts.map +1 -1
  78. package/node_modules/@gdh/core/dist/index.js +28 -5
  79. package/node_modules/@gdh/core/dist/index.js.map +1 -1
  80. package/node_modules/@gdh/core/dist/migrations/entries/s2c2_to_s2c3_rules_schema_v2_to_v3.d.ts +3 -0
  81. package/node_modules/@gdh/core/dist/migrations/entries/s2c2_to_s2c3_rules_schema_v2_to_v3.d.ts.map +1 -0
  82. package/node_modules/@gdh/core/dist/migrations/entries/s2c2_to_s2c3_rules_schema_v2_to_v3.js +247 -0
  83. package/node_modules/@gdh/core/dist/migrations/entries/s2c2_to_s2c3_rules_schema_v2_to_v3.js.map +1 -0
  84. package/node_modules/@gdh/core/dist/migrations/entries/s3c8_to_s3c9_register_runtime_bridge_autoload.d.ts +3 -0
  85. package/node_modules/@gdh/core/dist/migrations/entries/s3c8_to_s3c9_register_runtime_bridge_autoload.d.ts.map +1 -0
  86. package/node_modules/@gdh/core/dist/migrations/entries/s3c8_to_s3c9_register_runtime_bridge_autoload.js +152 -0
  87. package/node_modules/@gdh/core/dist/migrations/entries/s3c8_to_s3c9_register_runtime_bridge_autoload.js.map +1 -0
  88. package/node_modules/@gdh/core/dist/migrations/envelopes/envelope-output-validator.d.ts +3 -0
  89. package/node_modules/@gdh/core/dist/migrations/envelopes/envelope-output-validator.d.ts.map +1 -0
  90. package/node_modules/@gdh/core/dist/migrations/envelopes/envelope-output-validator.js +67 -0
  91. package/node_modules/@gdh/core/dist/migrations/envelopes/envelope-output-validator.js.map +1 -0
  92. package/node_modules/@gdh/core/dist/migrations/envelopes/index.d.ts +37 -0
  93. package/node_modules/@gdh/core/dist/migrations/envelopes/index.d.ts.map +1 -0
  94. package/node_modules/@gdh/core/dist/migrations/envelopes/index.js +60 -0
  95. package/node_modules/@gdh/core/dist/migrations/envelopes/index.js.map +1 -0
  96. package/node_modules/@gdh/core/dist/migrations/envelopes/types.d.ts +121 -0
  97. package/node_modules/@gdh/core/dist/migrations/envelopes/types.d.ts.map +1 -0
  98. package/node_modules/@gdh/core/dist/migrations/envelopes/types.js +2 -0
  99. package/node_modules/@gdh/core/dist/migrations/envelopes/types.js.map +1 -0
  100. package/node_modules/@gdh/core/dist/migrations/golden-harness.d.ts +40 -0
  101. package/node_modules/@gdh/core/dist/migrations/golden-harness.d.ts.map +1 -0
  102. package/node_modules/@gdh/core/dist/migrations/golden-harness.js +71 -0
  103. package/node_modules/@gdh/core/dist/migrations/golden-harness.js.map +1 -0
  104. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.d.ts +322 -0
  105. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.d.ts.map +1 -0
  106. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.js +384 -0
  107. package/node_modules/@gdh/core/dist/migrations/managed-surface-classes.js.map +1 -0
  108. package/node_modules/@gdh/core/dist/migrations/probes.d.ts +58 -0
  109. package/node_modules/@gdh/core/dist/migrations/probes.d.ts.map +1 -0
  110. package/node_modules/@gdh/core/dist/migrations/probes.js +112 -0
  111. package/node_modules/@gdh/core/dist/migrations/probes.js.map +1 -0
  112. package/node_modules/@gdh/core/dist/migrations/registry.d.ts +205 -0
  113. package/node_modules/@gdh/core/dist/migrations/registry.d.ts.map +1 -0
  114. package/node_modules/@gdh/core/dist/migrations/registry.js +214 -0
  115. package/node_modules/@gdh/core/dist/migrations/registry.js.map +1 -0
  116. package/node_modules/@gdh/core/dist/state/atomic-write.d.ts +19 -0
  117. package/node_modules/@gdh/core/dist/state/atomic-write.d.ts.map +1 -0
  118. package/node_modules/@gdh/core/dist/state/atomic-write.js +34 -0
  119. package/node_modules/@gdh/core/dist/state/atomic-write.js.map +1 -0
  120. package/node_modules/@gdh/core/dist/state/migration-state.d.ts +135 -0
  121. package/node_modules/@gdh/core/dist/state/migration-state.d.ts.map +1 -0
  122. package/node_modules/@gdh/core/dist/state/migration-state.js +186 -0
  123. package/node_modules/@gdh/core/dist/state/migration-state.js.map +1 -0
  124. package/node_modules/@gdh/core/dist/state/processes-snapshot.d.ts +72 -0
  125. package/node_modules/@gdh/core/dist/state/processes-snapshot.d.ts.map +1 -0
  126. package/node_modules/@gdh/core/dist/state/processes-snapshot.js +113 -0
  127. package/node_modules/@gdh/core/dist/state/processes-snapshot.js.map +1 -0
  128. package/node_modules/@gdh/core/dist/state/render-inventory.d.ts +54 -0
  129. package/node_modules/@gdh/core/dist/state/render-inventory.d.ts.map +1 -0
  130. package/node_modules/@gdh/core/dist/state/render-inventory.js +77 -0
  131. package/node_modules/@gdh/core/dist/state/render-inventory.js.map +1 -0
  132. package/node_modules/@gdh/core/package.json +1 -1
  133. package/node_modules/@gdh/docs/dist/agent-contract.d.ts.map +1 -1
  134. package/node_modules/@gdh/docs/dist/agent-contract.js +2 -1
  135. package/node_modules/@gdh/docs/dist/agent-contract.js.map +1 -1
  136. package/node_modules/@gdh/docs/dist/guidance.d.ts.map +1 -1
  137. package/node_modules/@gdh/docs/dist/guidance.js +14 -7
  138. package/node_modules/@gdh/docs/dist/guidance.js.map +1 -1
  139. package/node_modules/@gdh/docs/package.json +2 -2
  140. package/node_modules/@gdh/mcp/dist/index.d.ts.map +1 -1
  141. package/node_modules/@gdh/mcp/dist/index.js +77 -1
  142. package/node_modules/@gdh/mcp/dist/index.js.map +1 -1
  143. package/node_modules/@gdh/mcp/package.json +8 -8
  144. package/node_modules/@gdh/observability/package.json +2 -2
  145. package/node_modules/@gdh/runtime/dist/bridge-surface.js +63 -2
  146. package/node_modules/@gdh/runtime/dist/bridge-surface.js.map +1 -1
  147. package/node_modules/@gdh/runtime/package.json +2 -2
  148. package/node_modules/@gdh/scan/package.json +3 -3
  149. package/node_modules/@gdh/verify/package.json +7 -7
  150. package/package.json +11 -11
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "product": "GDH",
3
- "version": "0.22.0",
3
+ "version": "0.24.0",
4
4
  "installMode": "packaged_install"
5
5
  }
@@ -2427,6 +2427,135 @@
2427
2427
  }
2428
2428
  ]
2429
2429
  }
2430
+ },
2431
+ {
2432
+ "version": "0.23.0",
2433
+ "releaseTag": "v0.23.0",
2434
+ "migrationStatus": "required",
2435
+ "summary": "v0.23.0 ships the persistent diagnostics broker for agent-visible Godot LSP feedback. Existing managed targets need `gdh migrate --apply` because GDH_GUIDANCE_UNIT_VERSION moves 16 -> 17 (authoring guidance now teaches the diagnostics broker workflow) and GDH_UPDATE_HOOK_VERSION moves 4 -> 5 (managed post-edit hooks now refresh the broker before the authoring check).",
2436
+ "releaseHighlights": {
2437
+ "summary": "v0.23.0 ships a persistent diagnostics broker for GDH-managed Godot targets. A target/worktree-local broker keeps a live Godot LSP client connected, maintains the current normalized diagnostics snapshot under `.gdh-state`, and exposes that snapshot to CLI, MCP, post-edit hooks, and generated agent guidance. Broker state is local-only, loopback-bound, and token-protected. `gdh authoring check --mode post-edit|final` remains the explicit validation/evidence path with broker fast-path and direct LSP/static fallback.",
2438
+ "operatorChanges": [
2439
+ "**New `gdh authoring diagnostics` CLI surface.** `status`, `current`, `refresh`, `doctor`, and `prune` operations let agents inspect current Godot LSP problems without re-running ad hoc authoring checks. `prune` is intentionally CLI-only and not exposed via MCP.",
2440
+ "**New MCP `authoring.diagnostics` tools.** MCP exposes `status`, `current`, `refresh`, and `doctor` parity for the same broker surface.",
2441
+ "**Post-edit hooks refresh the broker before authoring check.** Managed Codex and Claude post-edit hooks now call `gdh authoring diagnostics refresh --target <root> --changed <path>` before the existing `gdh authoring check --mode post-edit` call. Broker refresh failure is non-fatal; the authoring check falls back to direct LSP collection.",
2442
+ "**Generated agent guidance teaches the broker workflow.** Agent guidance distinguishes diagnostics-broker visibility (`diagnostics current/refresh/doctor`) from explicit evidence runs (`authoring check --mode final` for task handoff, commit, or broad validation).",
2443
+ "**Honest snapshot scope and freshness.** Snapshots default to `opened_files_only` scope and `scope_limited` freshness classification. GDH does not claim whole-project diagnostics unless the Godot LSP emits evidence at that scope.",
2444
+ "**Self-update detects legacy hooks without diagnostics refresh.** Self-update re-renders post-edit hooks that pre-date the broker workflow.",
2445
+ "**Docs-validation tripwires.** `DIAG-BROKER-01` validate-docs checks block regression of the `authoring-dirty.json` ledger and Stop-hook validation patterns."
2446
+ ]
2447
+ },
2448
+ "updateContract": {
2449
+ "summary": "Managed targets need release-specific migration for v0.23.0 because generated authoring guidance and post-edit hook surfaces changed for the diagnostics broker workflow. After self-update, run `gdh migrate --apply`, then validate adapter status, drift, and the new diagnostics broker surfaces.",
2450
+ "steps": [
2451
+ {
2452
+ "id": "self_update_runtime_workflow_package",
2453
+ "kind": "mechanical",
2454
+ "summary": "Install the v0.23.0 GDH package.",
2455
+ "detail": "Run the normal GDH self-update or package update path. This makes the new authoring diagnostics CLI/MCP surfaces, refreshed managed hook renderer, and updated guidance available to the host.",
2456
+ "commands": [
2457
+ "gdh self-update --apply"
2458
+ ],
2459
+ "validationCommands": [
2460
+ "gdh status"
2461
+ ]
2462
+ },
2463
+ {
2464
+ "id": "rebake_diagnostics_broker_surfaces",
2465
+ "kind": "mechanical",
2466
+ "summary": "Re-bake managed authoring guidance and post-edit hook surfaces.",
2467
+ "detail": "Run `gdh migrate --apply` so guidance unit version 17 writes the new diagnostics broker guidance and hook version 5 writes the managed post-edit hooks that refresh the broker before the authoring check.",
2468
+ "commands": [
2469
+ "gdh migrate --apply"
2470
+ ],
2471
+ "validationCommands": [
2472
+ "gdh adapters status",
2473
+ "gdh verify drift",
2474
+ "gdh status"
2475
+ ]
2476
+ },
2477
+ {
2478
+ "id": "verify_diagnostics_broker_visibility",
2479
+ "kind": "agent_reasoning",
2480
+ "summary": "Confirm the diagnostics broker is reachable for the target.",
2481
+ "detail": "Inspect the broker with `gdh authoring diagnostics status` and, if needed, `gdh authoring diagnostics doctor`. On hosts without a configured Godot editor binary, expect honest `unavailable` results and rely on `gdh authoring check --mode final` for explicit evidence runs. Use `gdh authoring diagnostics refresh --changed <path>` after edits to warm the snapshot before reading it.",
2482
+ "commands": [
2483
+ "gdh authoring diagnostics status",
2484
+ "gdh authoring diagnostics doctor",
2485
+ "gdh authoring diagnostics refresh --changed <path>",
2486
+ "gdh authoring diagnostics current"
2487
+ ],
2488
+ "validationCommands": [
2489
+ "gdh authoring diagnostics status",
2490
+ "gdh authoring check --mode final"
2491
+ ]
2492
+ }
2493
+ ]
2494
+ }
2495
+ },
2496
+ {
2497
+ "version": "0.24.0",
2498
+ "releaseTag": "v0.24.0",
2499
+ "migrationStatus": "required",
2500
+ "summary": "v0.24.0 ships v1.18 Migration Chain Integrity. Five managed-surface version constants bump (GDH_AGENT_CONTRACT_VERSION 8 -> 9, GDH_GUIDANCE_INDEX_VERSION 4 -> 5, GDH_GUIDANCE_UNIT_VERSION 17 -> 18, GDH_UPDATE_HOOK_VERSION 5 -> 6, GDH_RUNTIME_BRIDGE_SURFACE_VERSION 11 -> 12). The migration registry adds entry s3c8_to_s3c9_register_runtime_bridge_autoload — a class-3 project-native register_autoload op that writes the GDHBridge autoload entry into project.godot deterministically, replacing the pre-v0.24 manual editor plugin-enable detour the chain matrix flagged as compatibility_degraded.",
2501
+ "releaseHighlights": {
2502
+ "summary": "v0.24.0 ships the v1.18 Migration Chain Integrity milestone. GDH now guarantees that every supported version listed in `docs/product/SUPPORTED-VERSIONS.md` reaches HEAD through `gdh self-update` without manual editor intervention. The release adds a falsifiable five-condition `release:apply` gate (registry completeness, chain matrix, corpus parity, goldens, migration-verify outcome `pass`), a typed managed-surface drift manifest with module-load `assertClassRegistered` guards, deterministic GDHBridge autoload registration during install/repair/self-update, a single-direction migration registry with paired golden fixtures, durable backup with crash-resilient restore, render-inventory orphan sweeping, and a `bumpAndRebakePin` 12-step orchestrator that composes all of the above.",
2503
+ "operatorChanges": [
2504
+ "**Deterministic GDHBridge autoload registration.** `gdh setup`, `gdh self-update`, and `gdh migrate --apply` now write the GDHBridge autoload entry into `project.godot` directly. Pre-v0.24, agents driving self-update had to instruct the operator to open the Godot editor and enable the GDH Runtime Bridge plugin so it could register the autoload itself. The chain matrix flagged that detour as `compatibility_degraded`; v0.24 closes it as a class-3 project-native `register_autoload` op on the v1.18 manifest allowlist.",
2505
+ "**Migration chain matrix.** `npm run test:migration-chain` exercises every supported version (v0.18.0 through v0.23.0) end-to-end against HEAD via the installed tarball. `release:apply` invokes the matrix in-process and refuses to tag on non-zero exit.",
2506
+ "**Five-condition release-apply gate.** `corepack yarn release:apply` enforces five machine-verifiable conditions before tagging: registry completeness (every `surfaceVersionChange` has a bracketing `MIGRATION_REGISTRY_ENTRIES` entry), chain matrix exit 0, corpus parity (`SUPPORTED-VERSIONS.md` rows match `tests/fixtures/migration-corpus/v<version>/` directories), goldens exit 0, and migration-verify outcome `pass`. There is no env-flag bypass, no `--force`, no skip-attestation file.",
2507
+ "**Managed surface drift classification.** `GDH_MANAGED_SURFACE_CLASSES` from `@gdh/core` is the typed source of truth for the three drift classes (deterministic / user-data / project-native). Every managed-surface renderer carries a module-load `assertClassRegistered` guard that aborts the install pipeline if the manifest and a renderer drift.",
2508
+ "**Local pre-commit and pre-push hooks.** `corepack yarn hooks:install` installs simple-git-hooks. Pre-commit catches schema-affecting diffs without paired migration entries and goldens; pre-push runs the adjacent star-case chain test plus all goldens. Hooks are bypass-able by `git commit --no-verify` and `git push --no-verify` — these are git-level escapes that no hook framework can prevent.",
2509
+ "**Maintainer release skills.** `/gdh-dev:release`, `/gdh-dev:migration-verify`, and `/gdh-dev:publish` (Claude) and the Codex/Cursor equivalents now own the end-to-end release flow. `/gdh-dev:migration-verify` is a thin wrapper around `node scripts/release-lib/migration-verify.mjs` and consumes its locked JSON outcome contract.",
2510
+ "**Durable backup.** `bumpAndRebakePin` step 5 writes a directory-level durable backup at `.gdh-state/backup/` via the staged-rename strategy (`.gdh-state/backup.new/` → atomic `fs.rename`). Restore is byte-equal round-trip; user-edit drift is detected by absence of any KNOWN_GDH_MARKERS and persisted in the manifest's `preservation_notes`.",
2511
+ "**Render-inventory orphan sweeping.** `bumpAndRebakePin` writes `.gdh-state/render-inventory.json` after each successful re-bake; the next run computes set-diff against the previous inventory and deletes orphaned managed files. Symlink-safe (`fs.lstat` existence probe + `fs.rm` unlink semantics) and path-traversal-gated.",
2512
+ "**Migration-verifier JSON outcome contract.** `scripts/release-lib/migration-verify.mjs` returns one of `pass | blocked | incomplete` over six conditions (artifacts, registry completeness, release-note/manifest/verification consistency, corpus parity, chain matrix, goldens). Both `/gdh-dev:migration-verify` and `release:apply` consume the same JSON; `release:apply` passes pre-computed chain + goldens evidence so the helper does not double-spawn."
2513
+ ]
2514
+ },
2515
+ "updateContract": {
2516
+ "summary": "Managed targets need release-specific migration for v0.24.0 because five managed-surface version constants bumped and the migration registry now writes the GDHBridge autoload entry into project.godot deterministically. After self-update, run gdh migrate --apply, then validate adapter status, drift, and the deterministic autoload registration.",
2517
+ "steps": [
2518
+ {
2519
+ "id": "self_update_runtime_workflow_package",
2520
+ "kind": "mechanical",
2521
+ "summary": "Install the v0.24.0 GDH package.",
2522
+ "detail": "Run gdh self-update so the new managed surface contract versions and the s3c8_to_s3c9_register_runtime_bridge_autoload registry entry are available to the host.",
2523
+ "commands": [
2524
+ "gdh self-update --apply"
2525
+ ],
2526
+ "validationCommands": [
2527
+ "gdh status"
2528
+ ]
2529
+ },
2530
+ {
2531
+ "id": "rebake_v118_managed_surfaces",
2532
+ "kind": "mechanical",
2533
+ "summary": "Re-bake managed AGENTS.md, guidance, and hook surfaces; register the GDHBridge autoload in project.godot.",
2534
+ "detail": "Run gdh migrate --apply so agent contract version 9 writes the new AGENTS.md contract block, guidance index version 5 and unit version 18 write the refreshed guidance, hook version 6 writes managed hook scripts, and the v1.18 register_autoload op writes the GDHBridge autoload entry into project.godot if it is missing.",
2535
+ "commands": [
2536
+ "gdh migrate --apply"
2537
+ ],
2538
+ "validationCommands": [
2539
+ "gdh adapters status",
2540
+ "gdh verify drift",
2541
+ "gdh status"
2542
+ ]
2543
+ },
2544
+ {
2545
+ "id": "verify_runtime_bridge_autoload_registered",
2546
+ "kind": "agent_reasoning",
2547
+ "summary": "Confirm the GDHBridge autoload is registered deterministically in project.godot.",
2548
+ "detail": "Open project.godot and confirm an `[autoload]` section contains `GDHBridge=\"*res://addons/gdh_bridge/runtime/gdh_runtime_bridge.gd\"`. Pre-v0.24 targets that relied on the manual editor plugin-enable detour pick up the entry automatically during gdh migrate --apply. No editor session is required.",
2549
+ "commands": [
2550
+ "gdh status"
2551
+ ],
2552
+ "validationCommands": [
2553
+ "gdh status",
2554
+ "gdh authoring check --mode final"
2555
+ ]
2556
+ }
2557
+ ]
2558
+ }
2430
2559
  }
2431
2560
  ]
2432
2561
  }
@@ -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,CA6HT"}
1
+ {"version":3,"file":"authoring-hook-render.d.ts","sourceRoot":"","sources":["../src/authoring-hook-render.ts"],"names":[],"mappings":"AAIA,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,CAmIT"}
@@ -1,4 +1,5 @@
1
- import { GDH_UPDATE_HOOK_VERSION } from "@gdh/core";
1
+ import { GDH_UPDATE_HOOK_VERSION, assertClassRegistered } from "@gdh/core";
2
+ assertClassRegistered("authoring_hook", "deterministic");
2
3
  export const CLAUDE_AUTHORING_HOOK_RELATIVE_PATH = ".claude/hooks/gdh-authoring-guard.js";
3
4
  export const CODEX_AUTHORING_HOOK_RELATIVE_PATH = ".codex/hooks/gdh-authoring-guard.js";
4
5
  export const CLAUDE_AUTHORING_HOOK_COMMAND = "node -e \"const fs=require('fs'),path=require('path');let d=process.cwd();for(;;){const f=path.join(d,'.claude/hooks/gdh-authoring-guard.js');if(fs.existsSync(f)){require(f);break}const p=path.dirname(d);if(p===d)throw new Error('GDH Claude authoring hook not found');d=p}\"";
@@ -35,7 +36,13 @@ export function renderGdhAuthoringHook(input) {
35
36
  " const changed = collectChangedFiles(input, targetRoot);",
36
37
  " const authoring = changed.filter(isAuthoringValidationPath);",
37
38
  " if (authoring.length === 0) return allow();",
38
- " const result = runGdh(targetRoot, ['authoring', 'check', '--target', targetRoot, '--mode', 'post-edit', '--format', 'compact', ...authoring.flatMap((file) => ['--changed', file])]);",
39
+ " const changedArgs = authoring.flatMap((file) => ['--changed', file]);",
40
+ " // Attempt to refresh the diagnostics broker for changed files.",
41
+ " // Broker refresh failure is non-fatal: the authoring check falls back to direct LSP.",
42
+ " runGdh(targetRoot, ['authoring', 'diagnostics', 'refresh', '--target', targetRoot, ...changedArgs]);",
43
+ " // Run compact authoring check. When broker was refreshed, this uses the fresh snapshot.",
44
+ " // When broker is unavailable, this falls back to direct LSP post-edit collection.",
45
+ " const result = runGdh(targetRoot, ['authoring', 'check', '--target', targetRoot, '--mode', 'post-edit', '--format', 'compact', ...changedArgs]);",
39
46
  " if (!result.ok || !/Completion allowed\\./.test(result.output)) {",
40
47
  " return block(`GDH post-edit authoring check needs attention.\\n${result.output || result.error || 'No check output.'}`);",
41
48
  " }",
@@ -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,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,mBAAmB;QACnB,GAAG;QACH,EAAE;QACF,8CAA8C;QAC9C,2DAA2D;QAC3D,gEAAgE;QAChE,+CAA+C;QAC/C,yLAAyL;QACzL,qEAAqE;QACrE,8HAA8H;QAC9H,KAAK;QACL,mBAAmB;QACnB,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,uFAAuF;QACvF,qBAAqB;QACrB,yDAAyD;QACzD,qEAAqE;QACrE,wEAAwE;QACxE,8HAA8H;QAC9H,+FAA+F;QAC/F,yBAAyB;QACzB,GAAG;QACH,EAAE;QACF,oEAAoE;QACpE,wDAAwD;QACxD,2DAA2D;QAC3D,0DAA0D;QAC1D,sDAAsD;QACtD,4HAA4H;QAC5H,kHAAkH;QAClH,GAAG;QACH,EAAE;QACF,yCAAyC;QACzC,qBAAqB;QACrB,qEAAqE;QACrE,cAAc;QACd,iFAAiF;QACjF,iBAAiB;QACjB,GAAG;QACH,EAAE;QACF,uDAAuD;QACvD,iEAAiE;QACjE,oFAAoF;QACpF,2CAA2C;QAC3C,GAAG;QACH,EAAE;QACF,kEAAkE;QAClE,wEAAwE;QACxE,0DAA0D;QAC1D,kEAAkE;QAClE,2GAA2G;QAC3G,kEAAkE;QAClE,iJAAiJ;QACjJ,4GAA4G;QAC5G,sIAAsI;QACtI,KAAK;QACL,4EAA4E;QAC5E,8CAA8C;QAC9C,GAAG;QACH,yKAAyK;QACzK,yKAAyK;QACzK,EAAE;QACF,4CAA4C;QAC5C,iFAAiF;QACjF,sEAAsE;QACtE,GAAG;QACH,EAAE;QACF,qCAAqC;QACrC,qDAAqD;QACrD,uEAAuE;QACvE,qDAAqD;QACrD,iEAAiE;QACjE,yBAAyB;QACzB,GAAG;QACH,EAAE;QACF,iFAAiF;QACjF,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":"claude-statusline-render.d.ts","sourceRoot":"","sources":["../src/claude-statusline-render.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,oCACT,CAAC;AAEpC;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,yCAAyC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B5E"}
1
+ {"version":3,"file":"claude-statusline-render.d.ts","sourceRoot":"","sources":["../src/claude-statusline-render.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,oCACT,CAAC;AAEpC;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,yCAAyC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B5E"}
@@ -1,4 +1,5 @@
1
- import { GDH_UPDATE_HOOK_VERSION } from "@gdh/core";
1
+ import { GDH_UPDATE_HOOK_VERSION, assertClassRegistered } from "@gdh/core";
2
+ assertClassRegistered("claude_statusline", "deterministic");
2
3
  /**
3
4
  * Relative path of the optional managed Claude statusline renderer script.
4
5
  * GDH bakes this file so projects can opt into it manually, but adapter
@@ -1 +1 @@
1
- {"version":3,"file":"claude-statusline-render.js","sourceRoot":"","sources":["../src/claude-statusline-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAC1C,iCAAiC,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,4BAA4B,CAAC,cAAuB;IAClE,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,gGAAgG;QAChG,wFAAwF;QACxF,qFAAqF;QACrF,EAAE;QACF,2BAA2B;QAC3B,+BAA+B;QAC/B,2BAA2B;QAC3B,EAAE;QACF,+BAA+B;QAC/B,6EAA6E;QAC7E,EAAE;QACF,qBAAqB;QACrB,iCAAiC;QACjC,SAAS;QACT,mEAAmE;QACnE,2CAA2C;QAC3C,wDAAwD;QACxD,OAAO;QACP,kBAAkB;QAClB,GAAG;QACH,EAAE;QACF,kCAAkC;QAClC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"claude-statusline-render.js","sourceRoot":"","sources":["../src/claude-statusline-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE3E,qBAAqB,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAC1C,iCAAiC,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,4BAA4B,CAAC,cAAuB;IAClE,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,gGAAgG;QAChG,wFAAwF;QACxF,qFAAqF;QACrF,EAAE;QACF,2BAA2B;QAC3B,+BAA+B;QAC/B,2BAA2B;QAC3B,EAAE;QACF,+BAA+B;QAC/B,6EAA6E;QAC7E,EAAE;QACF,qBAAqB;QACrB,iCAAiC;QACjC,SAAS;QACT,mEAAmE;QACnE,2CAA2C;QAC3C,wDAAwD;QACxD,OAAO;QACP,kBAAkB;QAClB,GAAG;QACH,EAAE;QACF,kCAAkC;QAClC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-update-hook-render.d.ts","sourceRoot":"","sources":["../src/claude-update-hook-render.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,sCAAsC,sCACd,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,wCAAwC,6CACT,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAwCzE"}
1
+ {"version":3,"file":"claude-update-hook-render.d.ts","sourceRoot":"","sources":["../src/claude-update-hook-render.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,sCAAsC,sCACd,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,wCAAwC,6CACT,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAwCzE"}
@@ -1,4 +1,5 @@
1
- import { GDH_UPDATE_HOOK_VERSION } from "@gdh/core";
1
+ import { GDH_UPDATE_HOOK_VERSION, assertClassRegistered } from "@gdh/core";
2
+ assertClassRegistered("claude_update_hook", "deterministic");
2
3
  /**
3
4
  * Relative path of the managed Claude SessionStart parent hook script.
4
5
  * This is the .js file Claude Code invokes when a session opens on a
@@ -1 +1 @@
1
- {"version":3,"file":"claude-update-hook-render.js","sourceRoot":"","sources":["../src/claude-update-hook-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,sCAAsC,GACjD,mCAAmC,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,wCAAwC,GACnD,0CAA0C,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,2BAA2B,CAAC,aAAqB;IAC/D,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,gEAAgE;QAChE,qEAAqE;QACrE,uFAAuF;QACvF,EAAE;QACF,2BAA2B;QAC3B,+BAA+B;QAC/B,2BAA2B;QAC3B,6CAA6C;QAC7C,EAAE;QACF,gBAAgB;QAChB,gGAAgG;QAChG,qHAAqH;QACrH,4EAA4E;QAC5E,EAAE;QACF,iCAAiC;QACjC,yDAAyD;QACzD,+DAA+D;QAC/D,EAAE;QACF,qEAAqE;QACrE,EAAE;QACF,0EAA0E;QAC1E,yDAAyD;QACzD,sBAAsB;QACtB,wBAAwB;QACxB,qBAAqB;QACrB,YAAY;QACZ,uBAAuB;QACvB,kCAAkC;QAClC,6BAA6B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG;QAC7D,QAAQ;QACR,OAAO;QACP,EAAE;QACF,kBAAkB;QAClB,OAAO;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"claude-update-hook-render.js","sourceRoot":"","sources":["../src/claude-update-hook-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE3E,qBAAqB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,sCAAsC,GACjD,mCAAmC,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,wCAAwC,GACnD,0CAA0C,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,2BAA2B,CAAC,aAAqB;IAC/D,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,gEAAgE;QAChE,qEAAqE;QACrE,uFAAuF;QACvF,EAAE;QACF,2BAA2B;QAC3B,+BAA+B;QAC/B,2BAA2B;QAC3B,6CAA6C;QAC7C,EAAE;QACF,gBAAgB;QAChB,gGAAgG;QAChG,qHAAqH;QACrH,4EAA4E;QAC5E,EAAE;QACF,iCAAiC;QACjC,yDAAyD;QACzD,+DAA+D;QAC/D,EAAE;QACF,qEAAqE;QACrE,EAAE;QACF,0EAA0E;QAC1E,yDAAyD;QACzD,sBAAsB;QACtB,wBAAwB;QACxB,qBAAqB;QACrB,YAAY;QACZ,uBAAuB;QACvB,kCAAkC;QAClC,6BAA6B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG;QAC7D,QAAQ;QACR,OAAO;QACP,EAAE;QACF,kBAAkB;QAClB,OAAO;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-update-worker-render.d.ts","sourceRoot":"","sources":["../src/claude-update-worker-render.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAsER"}
1
+ {"version":3,"file":"claude-update-worker-render.d.ts","sourceRoot":"","sources":["../src/claude-update-worker-render.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAsER"}
@@ -1,4 +1,5 @@
1
- import { GDH_UPDATE_HOOK_VERSION, GDH_UPDATE_REGISTRY_URL, } from "@gdh/core";
1
+ import { GDH_UPDATE_HOOK_VERSION, GDH_UPDATE_REGISTRY_URL, assertClassRegistered, } from "@gdh/core";
2
+ assertClassRegistered("claude_update_worker", "deterministic");
2
3
  /**
3
4
  * Render the background worker source that is spawned (detached + unref) by
4
5
  * the SessionStart parent hook. The worker performs the HTTPS probe against
@@ -1 +1 @@
1
- {"version":3,"file":"claude-update-worker-render.js","sourceRoot":"","sources":["../src/claude-update-worker-render.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,6BAA6B,CAC3C,cAAuB;IAEvB,wEAAwE;IACxE,0EAA0E;IAC1E,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,mEAAmE;QACnE,0EAA0E;QAC1E,oEAAoE;QACpE,kEAAkE;QAClE,EAAE;QACF,eAAe;QACf,EAAE;QACF,2BAA2B;QAC3B,EAAE;QACF,wDAAwD;QACxD,oFAAoF;QACpF,0BAA0B;QAC1B,gFAAgF;QAChF,gFAAgF;QAChF,iCAAiC;QACjC,qCAAqC;QACrC,sCAAsC;QACtC,KAAK;QACL,iBAAiB;QACjB,GAAG;QACH,EAAE;QACF,gBAAgB;QAChB,gGAAgG;QAChG,+FAA+F;QAC/F,4EAA4E;QAC5E,EAAE;QACF,kDAAkD;QAClD,wBAAwB;QACxB,EAAE;QACF,iDAAiD;QACjD,2BAA2B;QAC3B,EAAE;QACF,mBAAmB;QACnB,SAAS;QACT,yBAAyB,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK;QACrE,2CAA2C;QAC3C,SAAS;QACT,kBAAkB;QAClB,EAAE;QACF,sBAAsB;QACtB,wBAAwB;QACxB,WAAW;QACX,sCAAsC;QACtC,+CAA+C;QAC/C,gCAAgC;QAChC,SAAS;QACT,oBAAoB;QACpB,KAAK;QACL,EAAE;QACF,qEAAqE;QACrE,gCAAgC;QAChC,EAAE;QACF,oBAAoB;QACpB,aAAa;QACb,aAAa;QACb,0CAA0C;QAC1C,oCAAoC;QACpC,+CAA+C;QAC/C,MAAM;QACN,EAAE;QACF,sFAAsF;QACtF,OAAO;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"claude-update-worker-render.js","sourceRoot":"","sources":["../src/claude-update-worker-render.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,qBAAqB,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,6BAA6B,CAC3C,cAAuB;IAEvB,wEAAwE;IACxE,0EAA0E;IAC1E,OAAO;QACL,qBAAqB;QACrB,wBAAwB,uBAAuB,EAAE;QACjD,mEAAmE;QACnE,0EAA0E;QAC1E,oEAAoE;QACpE,kEAAkE;QAClE,EAAE;QACF,eAAe;QACf,EAAE;QACF,2BAA2B;QAC3B,EAAE;QACF,wDAAwD;QACxD,oFAAoF;QACpF,0BAA0B;QAC1B,gFAAgF;QAChF,gFAAgF;QAChF,iCAAiC;QACjC,qCAAqC;QACrC,sCAAsC;QACtC,KAAK;QACL,iBAAiB;QACjB,GAAG;QACH,EAAE;QACF,gBAAgB;QAChB,gGAAgG;QAChG,+FAA+F;QAC/F,4EAA4E;QAC5E,EAAE;QACF,kDAAkD;QAClD,wBAAwB;QACxB,EAAE;QACF,iDAAiD;QACjD,2BAA2B;QAC3B,EAAE;QACF,mBAAmB;QACnB,SAAS;QACT,yBAAyB,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK;QACrE,2CAA2C;QAC3C,SAAS;QACT,kBAAkB;QAClB,EAAE;QACF,sBAAsB;QACtB,wBAAwB;QACxB,WAAW;QACX,sCAAsC;QACtC,+CAA+C;QAC/C,gCAAgC;QAChC,SAAS;QACT,oBAAoB;QACpB,KAAK;QACL,EAAE;QACF,qEAAqE;QACrE,gCAAgC;QAChC,EAAE;QACF,oBAAoB;QACpB,aAAa;QACb,aAAa;QACb,0CAA0C;QAC1C,oCAAoC;QACpC,+CAA+C;QAC/C,MAAM;QACN,EAAE;QACF,sFAAsF;QACtF,OAAO;QACP,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { type GdhDeferredActionStatus, type GdhEnvelopePendingAdvisory, type GdhHostHarnessIntrospect, type GdhProcessRestartProbe } from "@gdh/core";
2
+ /**
3
+ * Adapters consumed by {@link computeDeferredActionsAdvisory} (and threaded
4
+ * through `buildGdhStatusResult`). Both fields default to `null` so unit tests
5
+ * (which cannot introspect a real host harness) see probe results degrade to
6
+ * `pending` and the advisory remains correctly gated.
7
+ */
8
+ export interface GdhStatusBuildAdapters {
9
+ readonly hostHarnessIntrospect: GdhHostHarnessIntrospect;
10
+ readonly processProbe: GdhProcessRestartProbe;
11
+ }
12
+ /**
13
+ * Probed deferred-action entry surfaced through `gdh status`.
14
+ *
15
+ * Mirrors the `GdhDeferredAction` shape minus the on-disk-only fields; carries
16
+ * the live probe result so consumers can rebuild rendering without re-running
17
+ * the probes.
18
+ */
19
+ export interface GdhDeferredActionStatusEntry {
20
+ readonly id: string;
21
+ readonly description: string;
22
+ readonly status: GdhDeferredActionStatus;
23
+ readonly reason?: string;
24
+ }
25
+ /**
26
+ * Backup-cleanup advisory shape (D-17). Emitted ONLY when:
27
+ * 1. every probed deferred action returns `clean` (or there are zero), AND
28
+ * 2. `.gdh-state/backup/` exists (a manifest was readable), AND
29
+ * 3. `.gdh-state/backup.new/` does NOT exist (no in-progress migration).
30
+ *
31
+ * The `command` literal is the verbatim CLI invocation users run.
32
+ */
33
+ export interface GdhBackupAdvisory {
34
+ readonly command: "gdh migration clear-backups";
35
+ readonly reason: "all_deferred_actions_clean";
36
+ readonly from_pin: string;
37
+ readonly to_pin: string;
38
+ }
39
+ export interface GdhDeferredActionsAdvisoryResult {
40
+ readonly deferredActions: readonly GdhDeferredActionStatusEntry[];
41
+ readonly backupAdvisory: GdhBackupAdvisory | null;
42
+ /**
43
+ * Phase 73 D-12: envelope-pending advisory. `null` unless
44
+ * `migration.json.pending_envelope_resume` is non-null. Mutually exclusive
45
+ * with {@link GdhBackupAdvisory} — when this is non-null, `backupAdvisory`
46
+ * is `null` because clearing the durable backup while a chain is paused
47
+ * destroys the rollback substrate.
48
+ */
49
+ readonly envelopeAdvisory: GdhEnvelopePendingAdvisory | null;
50
+ }
51
+ /**
52
+ * Read `migration.json`, run the probe per deferred action, and decide whether
53
+ * to emit the backup-cleanup advisory.
54
+ *
55
+ * Threat mitigations:
56
+ * - T-72-05-03 (TOCTOU): re-reads migration.json AND backup state freshly
57
+ * inside this function; no cached probe results are consumed across calls.
58
+ * - T-72-05-04 (malformed migration.json): `readMigrationState` returns null
59
+ * on parse/shape failure → `deferredActions` is `[]` and the advisory is
60
+ * gated through the standard truth table.
61
+ * - T-72-05-06 (stale probe → clean): the gate requires `status === "clean"`
62
+ * for every probe; `stale` and `pending` both block the advisory.
63
+ * - T-72-05-07 (interrupted migration): staging-dir check forces the advisory
64
+ * to null whenever `.gdh-state/backup.new/` exists.
65
+ *
66
+ * Defaults: `adapters.hostHarnessIntrospect = null` and `adapters.processProbe
67
+ * = null` (every probe degrades to `pending`, so the advisory does not spuriously
68
+ * fire when a host cannot evaluate the deferred conditions).
69
+ */
70
+ export declare function computeDeferredActionsAdvisory(targetPath: string, adapters?: GdhStatusBuildAdapters): Promise<GdhDeferredActionsAdvisoryResult>;
71
+ //# sourceMappingURL=deferred-actions-advisory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferred-actions-advisory.d.ts","sourceRoot":"","sources":["../src/deferred-actions-advisory.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC5B,MAAM,WAAW,CAAC;AAOnB;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;IACzD,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,eAAe,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAClE,QAAQ,CAAC,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClD;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,GAAG,IAAI,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,sBAAsB,GAChC,OAAO,CAAC,gCAAgC,CAAC,CA0E3C"}
@@ -0,0 +1,89 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { readMigrationState, runDeferredActionProbe, } from "@gdh/core";
4
+ import { BACKUP_STAGING_RELATIVE_PATH, readBackupManifest, } from "./durable-backup.js";
5
+ /**
6
+ * Read `migration.json`, run the probe per deferred action, and decide whether
7
+ * to emit the backup-cleanup advisory.
8
+ *
9
+ * Threat mitigations:
10
+ * - T-72-05-03 (TOCTOU): re-reads migration.json AND backup state freshly
11
+ * inside this function; no cached probe results are consumed across calls.
12
+ * - T-72-05-04 (malformed migration.json): `readMigrationState` returns null
13
+ * on parse/shape failure → `deferredActions` is `[]` and the advisory is
14
+ * gated through the standard truth table.
15
+ * - T-72-05-06 (stale probe → clean): the gate requires `status === "clean"`
16
+ * for every probe; `stale` and `pending` both block the advisory.
17
+ * - T-72-05-07 (interrupted migration): staging-dir check forces the advisory
18
+ * to null whenever `.gdh-state/backup.new/` exists.
19
+ *
20
+ * Defaults: `adapters.hostHarnessIntrospect = null` and `adapters.processProbe
21
+ * = null` (every probe degrades to `pending`, so the advisory does not spuriously
22
+ * fire when a host cannot evaluate the deferred conditions).
23
+ */
24
+ export async function computeDeferredActionsAdvisory(targetPath, adapters) {
25
+ const hostHarnessIntrospect = adapters?.hostHarnessIntrospect ?? null;
26
+ const processProbe = adapters?.processProbe ?? null;
27
+ const migrationState = await readMigrationState(targetPath);
28
+ const probedActions = [];
29
+ for (const action of migrationState?.deferred_actions ?? []) {
30
+ const result = await runDeferredActionProbe(action, {
31
+ targetPath,
32
+ hostHarnessIntrospect,
33
+ processProbe,
34
+ });
35
+ const entry = result.reason !== undefined
36
+ ? {
37
+ id: action.id,
38
+ description: action.description,
39
+ status: result.status,
40
+ reason: result.reason,
41
+ }
42
+ : {
43
+ id: action.id,
44
+ description: action.description,
45
+ status: result.status,
46
+ };
47
+ probedActions.push(entry);
48
+ }
49
+ // Phase 73 D-12 — envelope-pending fourth gate. The marker is the in-flight
50
+ // resume substrate (D-11); clearing the durable backup while a chain is
51
+ // paused mid-bump destroys the rollback substrate. The two advisories are
52
+ // mutually exclusive: when the envelope marker is set, the backup advisory
53
+ // MUST be null, regardless of whether the other backup-cleanup gates pass.
54
+ const pendingEnvelope = migrationState?.pending_envelope_resume ?? null;
55
+ const noEnvelopePending = pendingEnvelope === null;
56
+ // Gate evaluation (advisory truth table):
57
+ // (a) every probed action is clean (zero is trivially true)
58
+ // (b) `.gdh-state/backup/` is present (manifest readable)
59
+ // (c) `.gdh-state/backup.new/` is NOT present (no interrupted migration)
60
+ // (d) Phase 73 D-12: no envelope is pending (mutually exclusive with
61
+ // envelopeAdvisory)
62
+ const allClean = probedActions.every((a) => a.status === "clean");
63
+ const manifest = await readBackupManifest(targetPath);
64
+ const backupExists = manifest !== null;
65
+ const stagingPath = path.join(targetPath, BACKUP_STAGING_RELATIVE_PATH);
66
+ const stagingExists = await fs
67
+ .stat(stagingPath)
68
+ .then(() => true)
69
+ .catch(() => false);
70
+ const noMigrationInProgress = !stagingExists;
71
+ const backupAdvisory = allClean && backupExists && noMigrationInProgress && noEnvelopePending
72
+ ? {
73
+ command: "gdh migration clear-backups",
74
+ reason: "all_deferred_actions_clean",
75
+ from_pin: manifest.from_pin,
76
+ to_pin: manifest.to_pin,
77
+ }
78
+ : null;
79
+ const envelopeAdvisory = pendingEnvelope !== null
80
+ ? {
81
+ envelope_ref: pendingEnvelope.envelope_ref,
82
+ from_pin: pendingEnvelope.from_pin,
83
+ to_pin: pendingEnvelope.to_pin,
84
+ command: `gdh migration record-envelope-result ${pendingEnvelope.envelope_ref} --result-file <path>`,
85
+ }
86
+ : null;
87
+ return { deferredActions: probedActions, backupAdvisory, envelopeAdvisory };
88
+ }
89
+ //# sourceMappingURL=deferred-actions-advisory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferred-actions-advisory.js","sourceRoot":"","sources":["../src/deferred-actions-advisory.ts"],"names":[],"mappings":"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"}