Repository navigation
Conversation
Add a scope job to ci.yaml that calls the reusable change-scope workflow, and gate test, bench and conformance on its output. The jobs that depend on test keep the implicit success() and skip together with it. The gate is `!cancelled() && needs.scope.outputs.product != 'false'`, so a scope job that fails or returns nothing runs every product job; only a scope job that succeeds with false skips them. Pushes and manual runs always report true. The two aggregator jobs, e2e-compat and race-stress, run under always(). They pass when every group succeeded, or when the groups were skipped and the scope output is false. A skipped group on a product pull request (for example when test failed) or an empty scope output now fails them, so a skip never reads as a pass by accident. lint and helm have no condition and run on every pull request. lint now also carries the infra checks that used to sit in test: the observability asset sync check, the scripts/ci unit tests (plus the classifier and scope wiring tests) and the configuration reference check. Two new steps join them: the README support-policy test and scripts/ci/validate_compose.sh, which runs docker compose config -q on every tracked compose file (standalone files and each overlay on its base) and fails when a compose file is missing from its list. test_scope_wiring.py reads the workflows and asserts that lint and helm are never skipped, that every job reading the scope output lists scope in needs and uses the canonical gate, that jobs downstream of test cannot bypass success(), and that both aggregators test the scope output.
…quests Add the reusable change-scope job to the security, quality report, compatibility, pipeline e2e, perf A/B and visual workflows, and gate their product jobs on its output. A pull request that changes only infra paths now skips Security / runtime, report, loki-pinned, vl-pinned, drilldown-pinned-runtime, drilldown-grafana-pr-matrix, e2e-pipeline, perf-smoke and visual-smoke. A skipped job reports success, so the required checks still pass. The gate is "!cancelled() && needs.scope.outputs.product != 'false'", combined with each job's existing condition. If the scope job fails its output is empty, so the product jobs run. Pushes to main, scheduled runs and manual dispatches are unchanged: the classifier reports product for every event that is not a pull request. Security / static, the matrix-source jobs, the scheduled matrices and the visual publish and comment jobs keep their current conditions; the last two already skip when visual-smoke is skipped. visual-smoke combines the gate with its label condition, and the scope job carries the same condition so a label that does not re-run the check does not start a scope run either. PR Quality Report moves pull-requests: write from the workflow to the report job, which is the only job that needs it.
⚪ Performance A/B: no change beyond noise8 shape×range — 8 ⚪ same · results vs Loki: 7 same, 0 new difference(s), 1 pre-existing Every shape is within noise of the base build (±30% and 100 ms). 8 unchanged shape×range (within noise)
Cold (first-run) timings — what a user opening a panel sees
Why these shapes
base |
✅ Visual smoke: passedBase
Gate: a base-vs-PR data difference passes when the PR is closer to Loki, and fails when the PR diverges from Loki or Loki cannot decide it (at a range Loki does not hold, a difference passes when the same page proved it closer to Loki at a shorter range; otherwise label the pull request Core set montages (5): base | PR | Lokidd-fields-1h dd-landing-1h dd-service-logs-1h explore-logs-plain-1h explore-metric-plain-1h All montages of this run: |
PR Quality ReportCompared against base branch Coverage and tests
Compatibility
Performance smokeLower CPU cost (
State
|





Throwaway draft. It carries the commits of #822 and #823 plus a no-op comment under
internal/, so the change scope is product and every product job must run with the new gating. A second push adds a deliberately failing unit test to show thattestande2e-compatgo red and block the merge. This pull request is closed without merging.