channel: add 'handoff' verb for terse holder + expected-action view #11

Closed
opened 2026-06-03 08:51:01 +00:00 by coilysiren · 1 comment
Owner

Ported from closed coilyco-bridge/coily#100. Home moved to otel-a2a-relay-cli (coily channel removed in coily v2.51.0).

Problem

A VHGC status check ran channel read VHGC --format markdown and got back ~120 lines of charter, onboarding prose, recent events, and the full state payload. The only two things actually needed:

  • Who currently holds the handoff?
  • What are they expected to do?

Plus, ideally: is that holder still alive (last status event within liveness window), and how long since the channel last moved. read is right for onboarding a new agent. It's wrong for "is this channel stuck and on whom." A dedicated terse verb closes that gap.

Proposal

channel handoff <id> [--format text|json|yaml]

Text default, one screen. Fields, all derived from the newest state event plus the recent event tail:

  • holder - state.handoff.holder.
  • liveness - compare now() against the holder's newest status event timestamp vs status_cadence_seconds (or 600s default). Surface alive / silent / dead.
  • expected - state.handoff.expected_action, wrapped to terminal width.
  • last event - id + kind + author + age of the most recent event of any kind.
  • mission - state.mission line.

--format json|yaml for piping (e.g. a daily backlog routine flagging every dead channel).

Why now

  • Mobile-first: a dictated "who holds VHGC, what's the next step" should fit on one phone screen, not 120 lines.
  • Doubles as the natural verb a backlog sweep calls to flag stuck channels (holder=dead + age>1d).
  • Cheap: pure projection over data the backend already returns. No new endpoint, no schema change.

Out of scope

  • Listing every channel's holder at once - that's channel list (the list verb) cross-joined with this.
  • Auto-kicking dead holders. Surfacing state is enough; reassignment is a state-event POST by a successor agent.

Related

  • The list verb (ported as a sibling issue). The pair (list, handoff <id>) covers "what's stuck where" without a full read.
  • otel-a2a-relay channels protocol v2 already carries handoff.holder, handoff.expected_action, mission, status_cadence_seconds. No protocol change.
_Ported from closed coilyco-bridge/coily#100. Home moved to otel-a2a-relay-cli (coily channel removed in coily v2.51.0)._ **Problem** A VHGC status check ran `channel read VHGC --format markdown` and got back ~120 lines of charter, onboarding prose, recent events, and the full state payload. The only two things actually needed: - Who currently holds the handoff? - What are they expected to do? Plus, ideally: is that holder still alive (last status event within liveness window), and how long since the channel last moved. `read` is right for onboarding a new agent. It's wrong for "is this channel stuck and on whom." A dedicated terse verb closes that gap. **Proposal** ``` channel handoff <id> [--format text|json|yaml] ``` Text default, one screen. Fields, all derived from the newest `state` event plus the recent event tail: - **holder** - `state.handoff.holder`. - **liveness** - compare now() against the holder's newest `status` event timestamp vs `status_cadence_seconds` (or 600s default). Surface `alive` / `silent` / `dead`. - **expected** - `state.handoff.expected_action`, wrapped to terminal width. - **last event** - id + kind + author + age of the most recent event of any kind. - **mission** - `state.mission` line. `--format json|yaml` for piping (e.g. a daily backlog routine flagging every dead channel). **Why now** - Mobile-first: a dictated "who holds VHGC, what's the next step" should fit on one phone screen, not 120 lines. - Doubles as the natural verb a backlog sweep calls to flag stuck channels (holder=dead + age>1d). - Cheap: pure projection over data the backend already returns. No new endpoint, no schema change. **Out of scope** - Listing every channel's holder at once - that's `channel list` (the list verb) cross-joined with this. - Auto-kicking dead holders. Surfacing state is enough; reassignment is a state-event POST by a successor agent. **Related** - The `list` verb (ported as a sibling issue). The pair (`list`, `handoff <id>`) covers "what's stuck where" without a full `read`. - otel-a2a-relay channels protocol v2 already carries `handoff.holder`, `handoff.expected_action`, `mission`, `status_cadence_seconds`. No protocol change.
Author
Owner

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: burndown-2026-06.

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: `burndown-2026-06`.
coilysiren 2026-06-17 08:23:41 +00:00
Commenting is not possible because the repository is archived.
No description provided.