Child of #245. Phase 3 (Downstream attribution) was deferred from the #245 core delivery (Phases 0–2 shipped the correlation envelope across orchestrator logs, TaskEvents, and agent OTel). This issue extends the same {task_id, user_id, repo, trace_id} envelope to the platform's outbound edges — where ABCA talks to the outside world.
Context: what #245 already delivered
- Correlation contract documented in
docs/design/OBSERVABILITY.md ("Correlation envelope" + "Join model").
- Orchestrator logs carry
{task_id, user_id, repo} on admission→terminal transitions (via logger.child).
- TaskEvents (orchestrator + agent) stamp
user_id/repo, and agent events stamp trace_id — so the event stream joins to the X-Ray trace.
- Agent OTel root span + baggage carry the envelope.
- Git commits already carry
Task-Id: / Prompt-Version: trailers (pre-existing).
Phase 3 is what's left: attribution at the external-integration boundary, which is separable and lower value than the in-platform join.
Scope
1. GitHub PR-level attribution (extend existing trailers)
- Stamp task/user metadata onto PR bodies and PR comments (not just commit trailers), so a human reading a PR — or a reviewer reading a comment — can trace it back to the originating
{task_id, user_id} without leaving GitHub.
- Ensure the GitHub actor identity ABCA acts as is attributable back to the platform
user_id that triggered the task.
2. External webhook / API call correlation
Handlers that call out (Linear, Jira, Slack, GitHub API, arbitrary webhooks) carry no correlation today. Add one of:
- an outbound correlation header (e.g.
X-ABCA-Task-Id, or a W3C traceparent) on requests where the receiver can use it, and/or
- structured log fields
{task_id, user_id, trace_id} at each outbound call site,
so a failure in an external integration can be tied back to the task that caused it.
Out of scope
Acceptance criteria
Design questions to resolve first
Related
Child of #245. Phase 3 (Downstream attribution) was deferred from the #245 core delivery (Phases 0–2 shipped the correlation envelope across orchestrator logs, TaskEvents, and agent OTel). This issue extends the same
{task_id, user_id, repo, trace_id}envelope to the platform's outbound edges — where ABCA talks to the outside world.Context: what #245 already delivered
docs/design/OBSERVABILITY.md("Correlation envelope" + "Join model").{task_id, user_id, repo}on admission→terminal transitions (vialogger.child).user_id/repo, and agent events stamptrace_id— so the event stream joins to the X-Ray trace.Task-Id:/Prompt-Version:trailers (pre-existing).Phase 3 is what's left: attribution at the external-integration boundary, which is separable and lower value than the in-platform join.
Scope
1. GitHub PR-level attribution (extend existing trailers)
{task_id, user_id}without leaving GitHub.user_idthat triggered the task.2. External webhook / API call correlation
Handlers that call out (Linear, Jira, Slack, GitHub API, arbitrary webhooks) carry no correlation today. Add one of:
X-ABCA-Task-Id, or a W3Ctraceparent) on requests where the receiver can use it, and/or{task_id, user_id, trace_id}at each outbound call site,so a failure in an external integration can be tied back to the task that caused it.
Out of scope
user_id → orchestrator → agent) — tracked separately in RFC: Identity propagation — composable credential delegation via AgentCore Identity Token Vault #249.Acceptance criteria
docs/design/OBSERVABILITY.md(source + Starlight sync).Design questions to resolve first
X-ABCA-*vs W3Ctraceparent? (W3C composes with feat(observability): end-to-end task attribution and cross-plane trace correlation #245's OTel plane but only some receivers honor it.)Related