Description
GitHub issue #172: real estates adopt telemetry unevenly; some services emit metrics and logs but no traces, some are not instrumented at all. The contributor proposed an app-wide traces: false (fork commit 85ce92943c410986b9fc1bf57311460196209ec1). Rob chose on 2026-09-27 to redesign it as a per-node signals block covering traces, logs and metrics. The fork version gated only the trace projection, so derived spanmetrics and service-graph series kept flowing for untraced services and Signals() still declared traces; both are impossible in a real stack. The same fork commits also dropped the default service.version, added service_namespace to SDK profiles and added cAdvisor enrichment labels; those are out of scope unless captured evidence supports them.
Acceptance Criteria
- #1 An app services[] entry accepts a signals block with traces, logs and metrics switches; omitting it or any key leaves today’s output unchanged (just dump inventory identical for every shipped blueprint)
- #2 A node with traces off emits no spans and contributes no derived spanmetrics or service-graph series, and trace propagation through it follows the semantics frozen in the loop’s design packet
- #3 A node with logs off emits no log streams and a node with metrics off emits no app-level metrics; cluster and infrastructure series for its pods are unaffected
- #4 Signals() declares traces, logs and metrics only when at least one node emits them, and blueprint load rejects contradictory declarations the design packet names
- #5 BLUEPRINT-SCHEMA.md, fielddocs.json, signals/traces.md and signals/apm.md document the switch; no new metric, label or attribute name is introduced
Definition of Done
- #1 just check (fmt-check, lint, gen-check, env-check, docs-check, test, race, hygiene, ui-check, compose-check, helm-test, lab-check, signal-fidelity)
- #2 just gen (only if a blueprint field, construct/workload config struct, or a skill under plugins/synthkit/skills/ changed)
- #3 just dump — inventory diffed against signals/
Implementation Plan
Loop42: freeze per-node signals semantics in D1, then implement and review the public schema and emitted data contract before root landing.
Implementation Notes
loop42: implementation 0/4 consumed (L3 test-baseline seam only), review-repair 0/3, infrastructure retries 0, grants none. D1 design accepted and frozen. Existing random log ValueModels make the literal fixed-seed log hash nondeterministic on unchanged base; root decision J1 is in codex/state and L3/root-decision.md, but collaboration messaging failed before acknowledgement. No implementation candidate or push. Resume L3 after delivering J1 and reconciling its worktree and agent state.
loop43: resumed; L3 owns stable draw order and per-node signals implementation, gate and CodeRabbit.
loop44: resumed
loop44: implementation 1/4 consumed, review-repair 0/3, infrastructure retries 0, grants none. Candidate 088652c and Stage A e182fc2 passed focused tests, just check, gen-check, spdx-check, CodeRabbit complete zero findings, canonical golden parity and same-phase three-run stable inventory comparison. Independent R1 review could not be dispatched because repeated tool-selection errors invoked functions.wait with invalid cell IDs; no R1 finding exists. Candidate remains unpushed. Resume by dispatching R1 on 088652c with packet R1.md and root same-phase comparison evidence, then land only on clean verdict and exact-SHA ci.
loop44: implementation attempts 2/4 (impl-1 lane, impl-2 root route exception), review-repair 1/3, infrastructure retry 1 for CodeRabbit connection; grants none. R1 recheck clean on 96e9792. First L3 landing d04418d failed ci 36410226958 on coverage-mode default wire golden and was reverted by d748973; covering ci 36414101230 passed on 26d48ee. Root repaired test canonicalization using full-series sorting and Stage A per-platform goldens, with explicit YAML null variant; Linux Go1.27.0 coverage parity, just check, gen-check, spdx-check, docs-check and final CodeRabbit completed clean on abd3a29. Final landing 2915187 passed ci 36421108931. Three final-main and three same-phase base dump inventories have 3907 stable lines and 0 missing/added; frozen loop42 baseline differs in four time-phase and span-list rows, recorded in codex/scratch/loop44/root/final-main-inventory-comparison.txt.
Final Summary
Per-node traces, logs and metrics switches landed with schema and signal docs. Golden parity tests pin default wire output against pre-feature Stage A on Darwin and Linux; R1 review, final just check, Linux coverage parity, same-phase dump comparison and exact-SHA ci 36421108931 passed on landing 2915187.