o2r packaging: channels layer - runnable app shim + container + Postgres chart #47
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/otel-a2a-relay#47
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #45 (per-layer isolated-unit packaging).
Layer:
channels(otel-a2a-relay-channelsv0.1.0) - the Agent Channel coordination layer: a FastAPI router (make_router(...)) + Postgres schema + Pydantic models. Postgres-backed.Caveat unique to this layer: today it ships as a mountable library with no entrypoint - the router is built with caller-supplied
pool_provider/auth_dependencyand mounted into a host app. To package it as an isolated unit it needs a thin runnable app first.Runnable app shim (prereq)
__main__/o2r-channelsscript) that builds the pool from env (DATABASE_URL/ discrete PG vars), runsSCHEMAon startup, mountsmake_router, and exposes a bearerauth_dependency.Docker
192.168.0.194:30500/otel-a2a-relay-channels:<git-sha>.Helm
channels/chart/: the channels app Deployment + Service.channelDbvalues per #25's original scope). Templated OTLP endpoint, base_url, auth.Acceptance
/agent-channel/....Constraint: the packaged channels service is tailnet-only
The new channels deployment must be tailnet-only, matching the current backend's posture (today's channels API is reached via the
http://apitailnet sidecar, and its Postgresbackend-dbis tailnet-reachable - no public surface). Carry that forward:tailscale serve(or the existingapiingress pattern), not a public LoadBalancer/Ingress.o2rclients reach it via a tailnetbase_url(theO2R_BASE_URL/ configbase_urlrepoint at #52 cutover points at a tailnet address, not a public one).This is a hard requirement (Kai, 2026-06-02), not a default to be overridden.
Refinement (Kai, 2026-06-02): secure-by-default + exposure-as-plugin
Supersedes the earlier "tailnet-only, hardwired" note. Same intent (tailnet is the reachability path), cleaner architecture:
1. Postgres is not accessible by default.
NetworkPolicyrestricts ingress to the channels app pod only.2. Tailscale is a loosely-coupled plugin, not core.
Ingress), off by default (tailscale.enabled=falseor a discrete add-on chart). Enabling it is what makes the service tailnet-reachable.3. Future "serious business" integrations - document only for now.
Framing: maximum professionalism - secure-by-default, pluggable exposure, documented extension seams.
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.