Bootstrap otel-a2a-relay-cli: Go module + repo baseline + channel coordination verbs (impl of otel-a2a-relay#44) #1

Closed
opened 2026-06-02 21:50:20 +00:00 by coilysiren · 1 comment
Owner

Inaugural issue for this repo. This is the standalone Go CLI that replaces coily channel - the operator surface for o2r's Agent Channels and trust issuance.

Phase 0 - bootstrap

  • go mod init forgejo.coilysiren.me/coilyco-flight-deck/otel-a2a-relay-cli.
  • Adopt the agentic-os repo baseline: pre-commit hook block (catalog-trifecta, conventional-commit, documentation-layout, trufflehog), README / AGENTS / docs FEATURES trifecta, .coily/ + .ward/ lockdown files for dev-command gating of the repo itself.
  • Note the distinction: adopting the baseline pre-commit + dev-command gate is the normal fleet baseline and is fine. It is not the same as the CLI binary importing cli-guard to wrap its own verbs - that, per #591, we do not do. The binary is a plain standalone tool.

Phase 1 - channel coordination verbs (unblocks coily#172)

Lift the logic from coily's cmd/coily/channel.go:

  • Verbs: list, create, post, read, state, spec, events, close.
  • HTTP client to the deployed channels server (otel-a2a-relay#29). Protocol: channels-protocol.md in the relay repo.
  • SSM bearer auth - resolve the bearer token from SSM (/coilysiren/backend/datastore-token) per call, via the AWS SDK for Go. Carried over from coily channel.
  • Config - base URL of the channels deployment + SSM token path (the config.example.yaml channel: block that leaves coily).
  • Binary invocation - decide o2r channel <verb> vs a flat o2r <verb>. coily used coily channel <verb>.

Phase 2 - trust issuance verbs (blocked by relay #42)

  • Verbs: request / issue (produce a JWS-signed envelope, interactive verbatim acknowledgment prompt when destructive), verify.
  • Sign + verify in Go against the published envelope JSON Schema, using standard JWS (RFC 7515) over JCS-canonicalized JSON (RFC 8785). No import of the Python channels lib - the contract is the schema artifact plus the crypto standard.
  • Blocked by otel-a2a-relay#42 (which produces the envelope schema artifact + the Python verify side) and the #44 open question on where the schema artifact is published.
  • otel-a2a-relay#44 - design + the schema-as-published-artifact contract.
  • otel-a2a-relay#29 - the channels server this drives.
  • otel-a2a-relay#42 - the Python verify side + the schema/sign/verify split.
  • coilyco-bridge/coily#172 - the removal that repoints callers here (blocked on Phase 1).
  • agentic-os-kai#591 - the tech preference this repo embodies.
  • Repoint on landing: the ops-eng-o2r-agent-channel skill + any coily channel references in agentic-os / agentic-os-kai.
Inaugural issue for this repo. This is the standalone Go CLI that replaces `coily channel` - the operator surface for o2r's Agent Channels and trust issuance. - **Design + cross-repo tracking:** coilyco-flight-deck/otel-a2a-relay#44. - **Tech-pref basis:** coilyco-bridge/agentic-os-kai#591 (standalone Go repo, single-language, no cli-guard import). - **What it unblocks:** coilyco-bridge/coily#172 repoints `coily channel` callers here, so its removal cannot fully land until the coordination verbs exist. ## Phase 0 - bootstrap - `go mod init forgejo.coilysiren.me/coilyco-flight-deck/otel-a2a-relay-cli`. - Adopt the agentic-os repo baseline: pre-commit hook block (catalog-trifecta, conventional-commit, documentation-layout, trufflehog), README / AGENTS / docs FEATURES trifecta, `.coily/` + `.ward/` lockdown files for **dev-command gating** of the repo itself. - **Note the distinction:** adopting the baseline pre-commit + dev-command gate is the normal fleet baseline and is fine. It is **not** the same as the CLI binary importing cli-guard to wrap its own verbs - that, per #591, we do **not** do. The binary is a plain standalone tool. ## Phase 1 - channel coordination verbs (unblocks coily#172) Lift the logic from coily's `cmd/coily/channel.go`: - Verbs: `list`, `create`, `post`, `read`, `state`, `spec`, `events`, `close`. - HTTP client to the deployed channels server (otel-a2a-relay#29). Protocol: `channels-protocol.md` in the relay repo. - **SSM bearer auth** - resolve the bearer token from SSM (`/coilysiren/backend/datastore-token`) per call, via the AWS SDK for Go. Carried over from coily channel. - **Config** - base URL of the channels deployment + SSM token path (the `config.example.yaml` `channel:` block that leaves coily). - Binary invocation - decide `o2r channel <verb>` vs a flat `o2r <verb>`. coily used `coily channel <verb>`. ## Phase 2 - trust issuance verbs (blocked by relay #42) - Verbs: `request` / `issue` (produce a JWS-signed envelope, interactive verbatim acknowledgment prompt when `destructive`), `verify`. - **Sign + verify in Go** against the published envelope JSON Schema, using standard JWS (RFC 7515) over JCS-canonicalized JSON (RFC 8785). No import of the Python channels lib - the contract is the schema artifact plus the crypto standard. - Blocked by otel-a2a-relay#42 (which produces the envelope schema artifact + the Python verify side) and the #44 open question on where the schema artifact is published. ## Cross-links - otel-a2a-relay#44 - design + the schema-as-published-artifact contract. - otel-a2a-relay#29 - the channels server this drives. - otel-a2a-relay#42 - the Python verify side + the schema/sign/verify split. - coilyco-bridge/coily#172 - the removal that repoints callers here (blocked on Phase 1). - agentic-os-kai#591 - the tech preference this repo embodies. - Repoint on landing: the `ops-eng-o2r-agent-channel` skill + any `coily channel` references in agentic-os / agentic-os-kai.
Author
Owner

Phase 0 + Phase 1 landed in 8a7b49b2e8 on main. o2r channel verb tree builds, vets, and tests green. Homebrew formula at Formula/o2r.rb. Phase 2 (trust verbs) stays open upstream at otel-a2a-relay#42.

Phase 0 + Phase 1 landed in `8a7b49b2e8` on main. `o2r channel` verb tree builds, vets, and tests green. Homebrew formula at `Formula/o2r.rb`. Phase 2 (trust verbs) stays open upstream at otel-a2a-relay#42.
coilysiren referenced this issue from a commit 2026-06-02 22:39:36 +00:00
Commenting is not possible because the repository is archived.
No description provided.