# gsd-hermes v1.4.30 — Hermes Runtime Model Binding Receipts

Release date: 2026-04-26
Package: `gsd-hermes@1.4.30`
Upstream GSD base: `upstream/main@cd057255`
Previous package: `gsd-hermes@1.4.0`
Tracker: https://github.com/pingchesu/gsd-hermes/issues/32

## Summary

`gsd-hermes@1.4.30` closes the gap between GSD resolver intent and Hermes child-agent runtime construction for per-agent model overrides. GSD now surfaces structured model binding receipts, validates unsupported explicit bindings before spawn, and documents the proof boundary between resolver/workflow metadata, Hermes child construction, safe provider diagnostics, and live provider wire-level enforcement.

This release intentionally remains conservative: it proves Hermes child `AIAgent(model=...)` construction for configured per-agent overrides, but it does not claim provider wire-level `model=...` enforcement unless a future sanitized provider request capture proves it.

## Highlights

- Adds structured `model_binding_receipts` to plan-phase and execute-phase init payloads while keeping legacy flat `*_model` fields for compatibility.
- Establishes direct `delegate_task(model=...)` and batch `tasks[].model` as the Hermes child binding channels for GSD per-agent overrides.
- Fails fast when an explicit Hermes model binding cannot be honored, naming the agent, configured model, runtime/channel, and suggested fix.
- Adds tests proving invalid explicit model tokens cannot silently fall back to parent/default model.
- Adds Hermes Agent tests proving GSD planner/executor model tokens reach child `AIAgent(model=...)` construction.
- Adds sanitized provider diagnostics helpers that redact API keys, tokens, passwords, authorization headers, client secrets, and credential-bearing URLs.

## Proof boundary

| Evidence layer | Status in v1.4.30 | Notes |
| --- | --- | --- |
| GSD resolver proof | Supported | `model_overrides` and profile/runtime paths serialize into structured receipts. |
| Workflow handoff proof | Supported | Init payloads display configured/resolved model and binding channel before dispatch. |
| Hermes child-construction proof | Supported by tests | `delegate_task(model=...)` and `tasks[].model` reach child `AIAgent(model=...)`. |
| Safe provider diagnostics | Supported helper/test coverage | Only sanitized provider/model/proof metadata is retained. |
| Live provider wire-level proof | Not claimed | Requires future sanitized provider request instrumentation. |

`runtime_enforced=unknown` means provider wire-level proof has not been captured. It is not permission to silently fall back to the parent/default model.

## User impact

Users who configure `.planning/config.json` with per-agent `model_overrides` on Hermes get clearer behavior:

- A supported explicit override is passed into the Hermes child construction channel and shown in receipts.
- An unsupported explicit override fails before spawn with actionable diagnostics.
- A child agent inheriting the parent/default model when an explicit override was configured is considered a bug.

## Verification

Release validation should include:

```bash
npm run build:sdk
cd sdk && npx vitest run src/query/init.test.ts src/query/config-query.test.ts
cd ..
node --test tests/init.test.cjs tests/runtime-model-parity.test.cjs tests/workflow-size-budget.test.cjs tests/hermes-docs.test.cjs
npm run test:hermes
npm test
npm pack --dry-run
```

Hermes Agent companion validation:

```bash
cd /home/whiskey/.hermes/hermes-agent
.venv/bin/python -m pytest tests/tools/test_delegate.py tests/agent/test_auxiliary_codex_responses_conversion.py tests/agent/test_provider_diagnostics.py -q
.venv/bin/python -m py_compile tools/delegate_tool.py run_agent.py agent/provider_diagnostics.py agent/redact.py tests/tools/test_delegate.py tests/agent/test_provider_diagnostics.py
```

## Links

- Tracker issue: https://github.com/pingchesu/gsd-hermes/issues/32
- Upstream sync release notes: ./v1.4.0-upstream-sync-cd057255.md
- Hermes compatibility docs: ../hermes-compatibility.md
