Skip to content

Heads-up: herdr 0.7.5 API changes break tendwire (fixes available in the jerryfane fork) + Phase 2 turn-model implemented there #12

Description

@jerryfane

Hi! Sharing findings and offering fixes from the jerryfane/tendwire fork, where we run tendwire in production against a live herdr — partly as thanks for your recent contribution to luminexord/herdres, which we've deployed. Two things you may want:

1. herdr 0.7.5 breaks three tendwire integration points (production-verified)

If anyone runs tendwire against herdr 0.7.5, these bite immediately:

  • agent.get no longer resolves terminal-id targets → every command.submit fails pre-send with an authoritative HerdrErrorResponse ('could not resolve the private send target'). agent.list still publishes terminal_id → pane_id, so a fallback lookup restores sends. Our fix: jerryfane/tendwire@264fbf2 (small, self-contained, cherry-pickable).
  • pane turn removed from the CLI — the herdr_turn_adapter path still works; only bare-CLI consumers break.
  • Event-stream changes: pane-scoped status subscriptions are strictly validated (the old subscribe shape is rejected with an id-less error envelope, which strict envelope validation treats as fatal → the stream silently dies), and the generic refresh signal moved to a new pane.updated event. Without handling both, agent-status transitions (and therefore pending_decision observation) are lost. Our fix: jerryfane/tendwire@8ffff6d (subscription model with 0.7.4 fallback + id-less envelope tolerance). One hard-won caveat baked into its tests: route pane.updated to turn refresh ONLY — letting it re-project worker meta changed stable-key derivation and broke downstream identity consumers for hours in prod.

Also possibly relevant beyond 0.7.5: herdr observations can retain edge terminal-framing bytes (e.g. a trailing U+0001) in observed instruction text — anything fingerprinting/matching instruction text should strip edge C0/C1 controls (jerryfane/tendwire@138d53c).

Happy to open a clean compat-only PR against your main with the first and third items adapted, if useful — say the word.

2. FYI: Goal-13-style Phase 2 ('submissions are never turns') is implemented and live on the fork

The fork also carries a full implementation of the observation-authoritative turn model (submission ledger + delayed fail-closed 1:1 linker + migration + staged flag rollout), running in production since today. It's a large divergence (11 commits) so we're not proposing it as a PR — but if the design interests you it's all on jerryfane/tendwire main with the acceptance-test suite, and we'd gladly walk through it.

Thanks again for the delta-sync/final-delivery fix on herdres — it slotted straight into an open issue of ours (luminexord/herdres#171) and shipped same-day.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions