Skip to content

feat(observability): tracing bake-off sandbox, candidate manifests, fan-out, teardown and runbook (config slice of #1280) #1355

Closed

Description

@mashkovd

Context

Split from #1280 by owner decision (2026-09-24). The first implementer run on #1280 ended no-commits: the proposal mixed reproducible gitops/config work with live-cluster measurement, and the implementer correctly refused the live half.

This issue owns the reproducible code/config slice: everything that can be written, rendered and tested offline and merged inert. #1280 keeps the live bake-off: opening the sandbox, soaking, measuring, scoring, deciding and tearing down, all run by a human operator.

Scope

All of it is off by default. With otelCollector.eval.enabled: false, the rendered output of platform-gitops/bootstrap must be byte-identical to today's.

  1. Sandbox namespace and manifests. ResourceQuota + LimitRange for observability-eval inside the existing otelCollector.eval.enabled guard, driven by new eval.quota / eval.limits values:

    • the caps are persistentvolumeclaims: 4 and requests.storage: 40Gi;
    • a render test asserts them.
  2. Candidate deployments. One manifest set per candidate that survives the Stage A paper screen (from the spike(observability): compare Traceway, Tempo, Langfuse, Phoenix, SigNoz and Grafana Agent Observability #903 rubric), each behind its own per-candidate flag under otelCollector.eval, with a pinned chart/image version:

  3. Collector fan-out config. The OTel Collector exporter/pipeline fan-out to the enabled candidates, rendered only for candidates whose flag is on, plus a render test:

    • with all flags off, there is no fan-out;
    • with one flag on, there is exactly one extra exporter and the production pipeline is unchanged.
  4. Redaction regression test. A test that renders the collector and checks two things:

    Wire it into validate-manifests.yml. If otel-collector: redaction drops all GenAI token-count attributes; deployment.environment uses a deprecated key #1332 is still unfixed, the test is committed as an expected failure that names otel-collector: redaction drops all GenAI token-count attributes; deployment.environment uses a deprecated key #1332.

  5. Teardown automation. Two parts:

    • otelCollector.eval.teardownAfter is enforced by a CI check that fails once the date has passed while eval.enabled is still true;
    • a documented one-commit teardown (flags off) that removes every candidate and the namespace.
  6. Runbook. docs/runbooks/tracing-bake-off.md is the operator procedure spike(observability): run the live tracing backend bake-off and decide #1280 executes:

    • preconditions check;
    • open the sandbox and set the teardown date (≤ 14 days);
    • declare the soak window and trace volume before measuring;
    • where each rubric cell's measurement comes from;
    • the scoring and ADR promotion steps;
    • teardown and verification that nothing is left running.

Out of scope (stays in #1280)

  • Enabling the sandbox or any candidate in the live cluster.
  • The soak, every measurement and every rubric score.
  • The ADR decision.
  • The actual teardown.

Acceptance

  • With every eval flag off, helm template platform-gitops/bootstrap is unchanged versus main. This is checked in CI.
  • Render tests cover the quota/limits, per-candidate enablement, fan-out on/off, and the redaction rules.
  • The teardown-date CI check exists and is tested for both states.
  • The runbook covers every step spike(observability): run the live tracing backend bake-off and decide #1280 needs and references each flag by name.
  • No non-null rubric score cell is committed.

Related

Activity

  1. added
    agents:intakeFeed this issue to the mctl-agents Temporal pipeline
    on Sep 24, 2026
  2. removed
    agents:intakeFeed this issue to the mctl-agents Temporal pipeline
    on Sep 24, 2026
  3. mctl-agents commented on Sep 24, 2026

    @mctl-agents
    Contributor

    mctl-agents issue-investigator has analyzed this issue and created a proposal:

    https://github.com/mctlhq/mctl-gitops/tree/main/platform-gitops/agents-state/mctl-gitops/proposals/issue-1355-feat-observability-tracing-bake-off-sand/

    Status: proposed — pending human approval. Review requirements.md, design.md and tasks.md, then approve: signal this issue's DevLoopWorkflow (mctl-api POST /api/v1/agents/dev-loop/dev-loop-mctlhq-mctl-gitops-1355/approve, or python -m orchestrator.temporal.cli approve dev-loop-mctlhq-mctl-gitops-1355 --approver <your-identity>) — the workflow flips .status.yaml to accepted via the mctl-agents-approve operation and runs the Tier 2 implementer. If no DevLoopWorkflow is running for this issue (pre-Temporal proposal), run the mctl-agents-approve operation directly with service=mctl-gitops slug=issue-1355-feat-observability-tracing-bake-off-sand.

    The approver is recorded in .status.yaml and in the gitops commit, and the implementer refuses a proposal whose control.requires_human_approval carries no named approver — so prefer the mctl-api endpoint, which takes the approver from the authenticated caller rather than from what the caller types.

  4. added a commit that references this issue on Sep 24, 2026
  5. mashkovd commented on Sep 24, 2026

    @mashkovd
    MemberAuthor

    APPROVED by the owner (2026-09-24), with these decisions on the proposal's open questions:

    1. Candidate manifests in this slice: Tempo and agento11y self-managed only. Do not add the UNVERIFIED candidates merely to make the sandbox exhaustive.

    2. Do NOT modify the frozen rubric to add agento11y in this config slice. Rubric and scoring changes remain part of the live spike(observability): run the live tracing backend bake-off and decide #1280 work.

    3. Exact chart/image pins must be resolved from authoritative upstream sources at implementation time. If a pin cannot be verified:

      • omit that candidate;
      • document the omission in the runbook;
      • never guess a version.
    4. The sandbox budget is accepted:

      Resource Value
      requests.cpu 4
      requests.memory 12Gi
      limits.cpu 8
      limits.memory 20Gi
      pods 30
      persistentvolumeclaims 4
      requests.storage 40Gi
    5. The teardown deadline check uses the CI's current date. --today is only for deterministic tests.

    6. Everything must merge inert:

      • eval.enabled=false;
      • all candidate flags false;
      • no candidate deployed;
      • no live bake-off;
      • no rubric scores;
      • no backend decision.
    7. otel-collector: redaction drops all GenAI token-count attributes; deployment.environment uses a deprecated key #1332 is NOT fixed in this issue. The expected-failure mechanism may expose it in CI, but it must fail loudly once the bug disappears (a strict xfail, not a silent skip).

    8. Preserve the acceptance invariant: the default render is byte-identical to main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions