Unify run outcomes: one run-lifecycle event schema, rendered to both SigNoz (deploy#23) and the forgejo comment (#609) #610

Closed
opened 2026-07-05 04:02:09 +00:00 by coilysiren · 0 comments
Owner

Problem

Run outcomes are scattered across surfaces that do not share a schema:

  • #363 emits agent-level envelopes (one per tool call, from the drained transcript) as OTLP logs to SigNoz.
  • The run-level outcome signals - reserved, launched, smoke-death, reaped, merged, salvaged - live only as forgejo reservation / reservation-released comments posted by ward agent and the reaper. They are not in the telemetry stream at all, and they are what a weekly review actually cares about.
  • #609 is enriching those comments (verbose context, name-the-gate on failure).
  • coilyco-bridge/deploy#23 wants a dashboard of "runs by outcome, time-to-merge, failures by lifecycle step" - which needs run-level outcome events the stream does not yet carry.

So the same fact (a run died at the auth smoke test) is rendered once as a comment, is absent from telemetry, and has no shared definition.

Ask

Define one canonical run-lifecycle event (orchestrator-level, distinct from #363's per-tool-call envelope), emitted at each transition:

  • reserved, launched (cleared preflight / auth smoke), aborted (with a gate field: auth / uv / dotnet / ollama / other), reaped, merged, salvaged.
  • Fields: repo, issue, actor (driver), container, outcome, lifecycle/phase, gate (on abort), duration_ms, run_id.

Render the one event two ways:

  1. SigNoz - a structured log record on the same OTLP path as #363 (service.name=ward-agent, new event type), giving deploy#23's dashboard run-level outcomes.
  2. The forgejo comment - the reservation / release comment becomes a rendering of this event, converging with #609; its "name the gate + how to recover" reads the event's gate field.

Explicitly NOT: shipping the raw transcript blob

Structured events only. #363's minimization stands - tool results stay dropped, not redacted (you cannot reliably scrub arbitrary result/file content; a full blob is a residual-leak surface, high-volume, and not queryable). For a failure event only, an optional bounded, secret-scrubbed tail (last N lines) may attach to the aborted event - never every run, never the full transcript. The full raw log stays host-local (#609's docker echo / the dispatch .log) for on-demand drill-down.

Redaction gate

Run-lifecycle events are bounded metadata (plus the optional scrubbed failure tail), so they fit under the same WARD_AGENT_TELEMETRY redaction review that gates #363 - no new redaction surface beyond that review.

Payoff

Weekly bulk review across all three orgs falls out of the deploy#23 dashboard (run-level outcomes, not just tool calls); the tracker comment and the telemetry share one schema; and a smoke-death is diagnosable from the event's gate field without opening host logs.

Refs

#363 (per-tool-call envelope producer, landed), #609 (comment rendering + failure surfacing), coilyco-bridge/deploy#23 (SigNoz ingest + dashboard). Origin: eco-app director session, 2026-07-05.

## Problem Run outcomes are scattered across surfaces that do not share a schema: * [#363](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/363) emits **agent-level** envelopes (one per *tool call*, from the drained transcript) as OTLP logs to SigNoz. * The **run-level** outcome signals - reserved, launched, smoke-death, reaped, merged, salvaged - live only as **forgejo reservation / reservation-released comments** posted by `ward agent` and the reaper. They are **not in the telemetry stream at all**, and they are what a weekly review actually cares about. * [#609](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/609) is enriching those comments (verbose context, name-the-gate on failure). * [coilyco-bridge/deploy#23](https://forgejo.coilysiren.me/coilyco-bridge/deploy/issues/23) wants a dashboard of "runs by outcome, time-to-merge, failures by lifecycle step" - which needs run-level outcome events the stream does not yet carry. So the same fact (a run died at the auth smoke test) is rendered once as a comment, is absent from telemetry, and has no shared definition. ## Ask Define **one canonical run-lifecycle event** (orchestrator-level, distinct from #363's per-tool-call envelope), emitted at each transition: * `reserved`, `launched` (cleared preflight / auth smoke), `aborted` (with a **`gate`** field: auth / uv / dotnet / ollama / other), `reaped`, `merged`, `salvaged`. * Fields: `repo`, `issue`, `actor` (driver), `container`, `outcome`, `lifecycle`/phase, `gate` (on abort), `duration_ms`, `run_id`. Render the **one** event two ways: 1. **SigNoz** - a structured log record on the same OTLP path as [#363](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/363) (`service.name=ward-agent`, new event type), giving [deploy#23](https://forgejo.coilysiren.me/coilyco-bridge/deploy/issues/23)'s dashboard **run-level** outcomes. 2. **The forgejo comment** - the reservation / release comment becomes a *rendering* of this event, converging with [#609](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/609); its "name the gate + how to recover" reads the event's `gate` field. ## Explicitly NOT: shipping the raw transcript blob Structured events only. #363's minimization stands - tool results stay **dropped**, not redacted (you cannot reliably scrub arbitrary result/file content; a full blob is a residual-leak surface, high-volume, and not queryable). For a **failure** event only, an **optional bounded, secret-scrubbed tail** (last N lines) may attach to the `aborted` event - never every run, never the full transcript. The full raw log stays host-local ([#609](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/609)'s docker echo / the dispatch `.log`) for on-demand drill-down. ## Redaction gate Run-lifecycle events are bounded metadata (plus the optional scrubbed failure tail), so they fit under the **same `WARD_AGENT_TELEMETRY` redaction review** that gates #363 - no new redaction surface beyond that review. ## Payoff Weekly bulk review across all three orgs falls out of the deploy#23 dashboard (run-level outcomes, not just tool calls); the tracker comment and the telemetry share one schema; and a smoke-death is diagnosable from the event's `gate` field without opening host logs. ## Refs [#363](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/363) (per-tool-call envelope producer, landed), [#609](https://forgejo.coilysiren.me/coilyco-flight-deck/ward/issues/609) (comment rendering + failure surfacing), [coilyco-bridge/deploy#23](https://forgejo.coilysiren.me/coilyco-bridge/deploy/issues/23) (SigNoz ingest + dashboard). Origin: eco-app director session, 2026-07-05.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
coilyco-flight-deck/ward#610
No description provided.