Skip to content

docs(dynamic-tools-v1): compatibility contract + reserved streaming extension — #92 - #97

Merged
geisten merged 1 commit into
mainfrom
docs/dynamic-tools-v1-contract
Jul 13, 2026
Merged

docs(dynamic-tools-v1): compatibility contract + reserved streaming extension — #92#97
geisten merged 1 commit into
mainfrom
docs/dynamic-tools-v1-contract

Conversation

@geisten

@geisten geisten commented Jul 13, 2026

Copy link
Copy Markdown
Owner

Schließt #92 (Epic #94): macht den dynamic-tools-v1-Kompatibilitätsvertrag explizit — die Grundlage, auf die jeder Konsument (HA, künftiger OpenAI-Gateway, weitere Integrationen) „verlässlich, versioniert, updatefähig" baut.

Was hinzukommt (rein Doku, docs/proposals/dynamic-tools-v1.md)

  • Compatibility contract: Konsument pinnt Protokollversion + Binary-SHA-256, verifiziert per Start-Health-Handshake; Binary-Semver ist informativ. Update = neueres Binary gleicher Protokollversion einsetzen + neu verifizieren. Breaking Changes nur via -v2 oder rein additiv. SHA-256-Integrität (keine signierte Provenance). Interop-Oberflächen (OpenAI/MCP) sind separate Konsumenten-Projekte, nicht der Core.
  • Streaming (reserviert, additiv): v1 ist non-streaming (ein finales conversation.result); ein späterer opt-in stream:true + conversation.delta-Frame ist additiv (kein -v2) — damit ein interaktiver Konsument keine Sackgasse ist.

Verifiziert

Der Health-Frame im Doc (status:"ready") stimmt mit der Runtime überein (agent_main.h:234).

Nebenbefund (Cross-Repo, separat)

Die App-Repo-Fixture geist-home-assistant/protocol/dynamic-tools-v1.json verlangt "status":"ok", die Runtime sendet aber "ready". Das sollte im App-Repo abgeglichen werden (die Runtime + dieser Vertrag sind autoritativ mit "ready") — nicht Teil dieses PRs.

Epic #94 · Issue #92

…xtension — #92

Make the consumer contract explicit so integrations build reliably, versioned
and update-capable:
- Compatibility = protocol version (dynamic-tools-v1) + a pinned binary SHA-256,
  verified by the startup health handshake. Binary semver is informative.
- Update rule: swap a newer binary answering the same protocol id + re-verify;
  no in-place self-updater.
- Breaking changes only via -v2 or a strictly additive field; SHA-256 integrity
  only (signed provenance out of scope); interop surfaces (OpenAI/MCP) are
  separate consumer projects, not the core.
- Streaming reserved as an additive extension (opt-in stream:true +
  conversation.delta), so a later interactive consumer needs no -v2. v1 stays
  non-streaming.

Epic #94.
@geisten
geisten merged commit c385c31 into main Jul 13, 2026
9 checks passed
@geisten
geisten deleted the docs/dynamic-tools-v1-contract branch July 13, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant