docs: verify current self-hosted observability backends - #67
Conversation
The Velnor ci-code.yml build gate moves from 'mise run ci' to the canonical 'mise run build'. Expose a real compile leaf (cargo build with the same --workspace/--all-targets/--locked dimensions as the former cargo check leaf, so the gate strengthens rather than weakens) and turn 'ci' into a depends-only aggregate over the four canonical gate leaves so it is never co-scheduled with its children. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
The seven repo-local cargo-target cache declarations embedded
${{ github.sha }} in the exact key, so every run missed, restored via
the hash-prefixed restore-key, and saved a brand-new immutable entry -
one cache entry per commit, storage bloat, and no stable hits. Keep the
compatible dimensions (lane, os, arch, job, toolchain + Cargo.lock +
manifest digest) in the exact key and leave the existing
'<prefix>-<digest>-' restore-keys untouched: they prefix-match the
historical sha-suffixed entries, so per-commit revalidation stays
available as restore history while same-digest runs now hit exactly.
Workflows changed: footprint.yml, mcp-evals.yml, preview.yml,
scheduled-measurement.yml (fuzz target + bench target),
storage-integration.yml (anchor also covers the second job),
upgrade-harness.yml.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Record live feature-oriented evidence for Parallax main and refresh the fan-out lab to current supported backend deployments. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Record immutable Parallax and playground SHAs after the live-run fixes. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Pin the rebuilt committed Parallax executable hashes in the canonical evidence manifest. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 92c78b0387
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ROOT="$(cd .. && pwd)" | ||
|
|
||
| SENTRY_REF="${SENTRY_REF:-26.7.2}" # pin a release ≥25.8.0 (native OTLP). Re-pinned 2026-08-14; first verified 26.6.0 | ||
| SENTRY_REF="${SENTRY_REF:-26.8.0}" # pin a release ≥25.8.0 (native OTLP). Re-pinned 2026-09-04; first verified 26.6.0 |
There was a problem hiding this comment.
Refresh the vendored Sentry checkout on ref bumps
When this lab has already been run, vendor/sentry still contains the previous default (26.7.2); changing SENTRY_REF to 26.8.0 does not update it because the existing-directory path skips cloning or checkout entirely. Rerunning setup.sh therefore silently installs/tests the old stack while the report records 26.8.0, and explicit SENTRY_REF overrides have the same problem. Refresh or replace the checkout and verify that HEAD matches the requested ref.
AGENTS.md reference: AGENTS.md:L3-L3
Useful? React with 👍 / 👎.
| [[product.anyhow_edges]] | ||
| path = "crates/parallax-server/src/alerting/evaluator.rs" | ||
| ceiling = 7 | ||
| ceiling = 9 |
There was a problem hiding this comment.
Fix the added anyhow edges instead of raising the ratchet
Raising this exact ceiling from 7 to 9 without changing evaluator.rs converts the two additional anyhow edges into an accepted baseline rather than correcting the source regression; the repository's structural checker explicitly describes these ratchets as shrink-only. Remove or type the new edges and retain the lower ceiling, or explicitly identify why the root fix must be deferred.
AGENTS.md reference: AGENTS.md:L8-L9
Useful? React with 👍 / 👎.
|
|
||
| ```bash | ||
| # Parallax | ||
| PARALLAX_VERSION_OVERRIDE=0.1.0-research.3c4b68d cargo build --release -p parallax-cli -p parallax-mcp |
There was a problem hiding this comment.
Check out the recorded source before labeling the binary
For anyone running this reproduction from a different HEAD, PARALLAX_VERSION_OVERRIDE only changes the embedded version string; it does not select commit 3c4b68d. Because the instructions never check out the manifest SHA, they can build arbitrary current sources while labeling the result 0.1.0-research.3c4b68d, making the reported binary identity and SHA irreproducible. Check out the recorded Parallax SHA before building.
Useful? React with 👍 / 👎.
| ```bash | ||
| # Parallax | ||
| PARALLAX_VERSION_OVERRIDE=0.1.0-research.3c4b68d cargo build --release -p parallax-cli -p parallax-mcp | ||
| ./target/release/parallax serve --config artifacts/research/2026-09-04-main/parallax/config.toml |
There was a problem hiding this comment.
Generate the Parallax config used by the reproduction
On a clean checkout, artifacts/research/2026-09-04-main/parallax/config.toml does not exist—the committed directory contains only screenshots—and the reproduction never creates it. The serve command therefore fails before any scenario can run; add the exact config artifact or commands that generate it with the recorded ports and data directory.
Useful? React with 👍 / 👎.
| SIGNOZ_POURS_DIR=../../artifacts/research/2026-09-04-main/signoz-pours \ | ||
| docker compose -f compose.yml -f compose.signoz.yml config --quiet |
There was a problem hiding this comment.
Point the SigNoz check at the generated pours directory
The preceding ./setup-vendor.sh writes to vendor/signoz-pours by default, but this command overrides SIGNOZ_POURS_DIR to ../../artifacts/research/2026-09-04-main/signoz-pours, which is neither committed nor generated by these steps. A clean reproduction consequently fails while loading the included Compose file; pass the same override to setup-vendor.sh or remove it from this command.
Useful? React with 👍 / 👎.
The Rust scenario runner on the playground working branch introduced canonical scenario keys (product:*, sentry:*, security:*). Update every validation and reference document still citing the old ad-hoc c-series labels so evidence links resolve against the current runner output. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
… run #1 config: deny_unknown_fields on every config struct so misnested or typo'd keys fail startup instead of silently defaulting (the run's operator believed 0.0.0.0:14317 was bound while defaults applied). Tests: unknown_top_level_key_is_rejected_not_silently_ignored, unknown_section_key_is_rejected. #2 mcp: parallax-mcp now presents the API bearer token (--token flag / PARALLAX_API_TOKEN env) on every GraphQL request; empty token normalizes to the server's open mode. Test: loopback HTTP stub asserts the Authorization header is attached exactly when configured. #3 config: new public_url setting with resolved_public_url() so bundle and incident links stop assuming the bind address; the wildcard bind never emits 0.0.0.0 URLs. Test: preference and derivation cases. #4 ui+server: the embedded UI could not authenticate at all on a token-protected server - every route 401'd. New platform/auth module (localStorage token, bearer headers, percent-encoded access_token for EventSource), bearer on all fetch call sites, and a server-side authorize() middleware variant that accepts the query token on the SSE stream routes only; 401s route to a dedicated token-entry panel. Tests: api-token.test.ts (5), percent_decode unit cases, and m109_sse_query_token.rs integration coverage (401 without credential, 200 via access_token, wrong-token 401, percent-decoding, GraphQL scoping, bearer still accepted). Verified live: 401 -> token entry -> live UI -> SSE tail without reload; cargo test --workspace 748 passed; UI vitest 581 passed. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
SigNoz: replace the deprecated v0.129.0 vendor-clone overlay (upstream compose deprecated since v0.130.0) with a checked-in Foundry-generated deployment pinned to signoz v0.141.1 / otel-collector v0.144.9 on host ports 14327/14328/3301; setup-vendor.sh removed. OpenObserve v1.0.0 GA, Grafana otel-lgtm 0.33.0, HyperDX hyperdx-all-in-one 2.38.0 (with FRONTEND_URL so login redirects stop colliding with the playground catalog port), Maple v0.0.22, rustrak 0.14.12. rotel.env.example documents the HyperDX ingest-key header and the maple host-binary endpoint. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Canonical report docs/research/validation/2026-09-12-parallax-main- competitor-verification.md: environment manifest at re-derived upstream versions, Layer A ingest parity, feature-by-feature matrix against the strongest implementation of each shipped capability, the four defects with root causes and regression evidence, reproduction steps, and the final verdict. Competitor deep-dives, comparison set, progress log, and the feature inventory gain the dated live-verification sections; the fan-out lab README reflects the Foundry migration and current pins. Verdict in brief: ingest parity exact across all sinks; Parallax leads on attribute compare, agent-ready bundles/MCP, and the SQL console; trails on service-map polish, Sentry-grade triage depth, SigNoz-grade alert breadth, and deliberately does not rival Grafana dashboards/ PromQL. The initially-reported missing service map was corrected by re-verification: /ecosystem ships it. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Conflict resolution: lab pins, comparison set, and feature inventory take the live-verified 2026-09-12 content; scenario references re-applied to the canonical runner keys on the merged inventory text. Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Match the repo's integration-test lint convention (clippy::expect_used is workspace-warned and each integration fixture opts out at crate level). Signed-off-by: Alexey Zhokhov <alexey@zhokhov.com>
Summary
Record the 2026-09-04 live, no-bias comparison of Parallax main against the mandatory self-hosted observability set, with exact current stable references and reproducible evidence.
What ships
The PR adds the canonical feature-oriented report and machine-readable manifest, refreshes the OTLP fan-out lab to current supported backend versions, adds the supported Foundry SigNoz deployment path, captures browser evidence, and records the root causes and fixes for the fresh-stack and comparator integration failures. HyperDX's unbound AIO OTLP listener and Rustrak's red healthcheck are explicitly retained as blockers.
Verify locally
From the repository root, run
cargo xtask ci --fast; it should finish successfully with the Rust policy/docs gates and complete UI gate passing. Runcargo xtask docs links; it should report all tracked Markdown links valid. Rungit diff --check; it should produce no output and exit successfully.