Repository navigation
Record the #284 host rollout on the WSL workstation and the early expiry of silence 87eabf8a - #287
Conversation
…iry of silence 87eabf8a Adds observability/backends/paper-alert-file-sd-host-20260925.json. - #284's lines were applied surgically to the live config, and configure.py was not re-run. The WSL2 rendering carries shifted loopback ports (collector 28889/28888, qdrant 26333, vllm 18231, httpcheck 24333), and the renderer cannot override them. - Both staged files passed promtool 3.14.0 before install. After a SIGHUP, reloadConfigSuccess was true. - The Prometheus API read back the new expr, inactive, with 0 adaptive-paper targets, and an empty ALERTS query. - Silence 87eabf8a (alertname=EquitiesPaperMetricsMissing, due to end 2026-10-02) was expired early; Alertmanager then held 0 alerts for it. The live firing path still waits for a registered exporter, since the paper keys return HTTP 401. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Foundation ACK from native-agent-stack-9a, for head |
…e-render (#290) * Observability renderer: host loopback port overrides that survive a re-render All WSL 2 distributions share one network namespace, so the workstation moved five scraped services off their template ports (collector 18889 and 18888, Qdrant 16333, vLLM 8231, the 14333 HTTP check). configure.py had no input for that, so the host's live config was hand-adapted and any re-render would reset those ports; the #284 rollout (#287) had to be applied surgically for that reason. configure.py --port-overrides FILE takes a JSON object of template port to host port and rewrites every 127.0.0.1:<port> address in the configs and units in one pass. It keeps the map as <config-root>/port-overrides.json, which later renders reuse. It refuses the whole render (exit 2, nothing written) for a stale override, for a port that also appears outside a 127.0.0.1:<port> address (Grafana's http_port, Loki's listen ports), for a host port that collides with another rendered address, and for invalid input. The map is validated against the full render before any file is written. Rendering main with the workstation's map into a scratch root reproduces the live files: 14 of 15 byte-identical, and ecosystem-prometheus.yml equal as parsed YAML. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Port overrides: address the independent review - Medium: the bare-port check scanned the caller's root paths, so a data root such as .../18888-data refused an 18888 override with a misleading cause. The checks now ignore the four root paths, and the refusal names the file that has the bare port. - Low: a non-ASCII digit key (such as U+00B2) passed str.isdigit() and crashed int() with exit 1. Keys must now be ASCII digits (exit 2). - Low: the README lists malformed input among the refusals. - Tests: each template output without overrides equals the template with only its path tokens replaced; a root path containing the port digits renders; a mixed valid and stale map is refused; a non-ASCII digit key is refused. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
What
This records #284's post-merge host steps on the WSL workstation (
nativestack-5975wx-20260925) inobservability/backends/paper-alert-file-sd-host-20260925.json, as promised in #284. It also adds a pointer to the receipt from the backends README.How
Surgical apply, not a
configure.pyre-render. The live WSL2 config is a host-adapted rendering with shifted loopback ports: collector 28889/28888, qdrant 26333, vllm 18231, httpcheck 24333. All WSL 2 distributions share one network namespace (adoption/platforms/linux-wsl2.md), and the renderer has no host-override input, so a re-render would reset those ports.Staging and diff. Main's templates were rendered into a scratch directory and diffed against the live files.
prometheus.ymldiffers only by the 5-lineadaptive-paperfile_sd job.adaptive-paperjob at all. That is whyabsent(paper_trial_active)fired permanently here.Install and reload.
<config-root>/adaptive-paper-targets.jsonwas created as[].lastConfigTimemoved to 21:01:32Z withreloadConfigSuccesstrue.Read-back through the Prometheus API. The rule carries the new expr, is
inactiveandokwith 0 alerts, and was last evaluated at 21:01:52Z. Theadaptive-paperjob has 0 active and 0 dropped targets. The expression result andALERTS{alertname="EquitiesPaperMetricsMissing"}are both empty.Silence 87eabf8a. It matched
alertname=EquitiesPaperMetricsMissingand was due to end 2026-10-02. It was expired through the Alertmanager v2 API: the DELETE returned 200 and the silence isexpiredas of 21:02:18Z. Alertmanager then holds 0 alerts for that alert name.Limits
configure.pyrun on this host would reset the shifted ports. A host-override input for the renderer would be a foundation-lane improvement.Checks
validate.py,evidence_manifest.py --checkandvalidate_convergence.py --all-recordedpass. The full silence UUID is omitted, because the publication validator treats a UUID as a possible local session identifier.🤖 Generated with Claude Code