From 050c87a753082317a90276a23aa1c25a835bb6dd Mon Sep 17 00:00:00 2001 From: Derek Date: Sat, 14 Nov 2026 12:10:55 +1100 Subject: [PATCH] docs(transform-vector): trim stale text and config comments Removes or repoints 14 stale sentences in docs and code comments. They cover scalo release history, a restated broker image pin, assumed pod memory sizes, "currently" and "now" phrasing, and a "currently in beta" note. Cuts 139 comment lines from config files: template banners, commented-out settings, lint site counts and feature essays. Keeps a short reason beside a surprising value. --- .cargo/config.toml | 10 ++---- .gitleaks.toml | 29 ++------------- .hyperi-ci.yaml | 29 +++------------ Cargo.toml | 61 +++++--------------------------- clippy.toml | 42 +--------------------- deny.toml | 2 -- docs/internals.md | 3 +- docs/librdkafka.md | 6 ++-- pipelines/filebeat/README.md | 2 +- pipelines/filebeat/filebeat.yaml | 4 +-- rustfmt.toml | 17 --------- src/config/generate.rs | 4 +-- src/config/wiring.rs | 4 +-- src/deployment.rs | 6 ++-- src/main.rs | 3 +- src/vector/binary.rs | 3 +- tests/TESTING.md | 5 ++- tests/integration/config.rs | 2 +- 18 files changed, 36 insertions(+), 196 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index 1c20cb4..298a960 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,13 +1,7 @@ # Per-target CPU optimisations. # -# x86_64 takes AVX2, BMI1/2 and FMA (Haswell and later), which is the floor the -# rest of the DFE Rust fleet already ships. aarch64 stays on the generic model, -# where NEON is baseline. -# -# These belong under [target.], never [build]. The ARC native runner -# sets CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS, which counts as a target -# entry, and cargo reads build.rustflags only when no target entry exists -- so -# flags placed under [build] would be dropped in CI without a word. +# Under [target.], never [build]: cargo drops build.rustflags when a +# CARGO_TARGET__RUSTFLAGS is set, as CI runners do. [target.x86_64-unknown-linux-gnu] rustflags = ["-C", "target-cpu=x86-64-v3", "-C", "link-arg=-fuse-ld=mold"] diff --git a/.gitleaks.toml b/.gitleaks.toml index cf052fa..d9b4a40 100644 --- a/.gitleaks.toml +++ b/.gitleaks.toml @@ -1,10 +1,4 @@ -# Project-specific gitleaks allowlist -# Extends the CI base configuration (ci/.gitleaks.toml) -# -# The CI runs gitleaks to detect secrets in your code. This file lets you -# exclude false positives specific to your project. -# -# Documentation: https://github.com/gitleaks/gitleaks#configuration +# Project gitleaks allowlist: https://github.com/gitleaks/gitleaks#configuration [extend] useDefault = true @@ -12,28 +6,9 @@ useDefault = true [allowlist] description = "Project-specific false positive allowlist" -# Paths to exclude from scanning (regex patterns) paths = [ - # Git submodules (have their own scanning) '''(^|/)ci/''', '''(^|/)ai/''', - # The bundled filebeat pipeline is ported public Vector templates, not - # credentials: the Meraki event subtype '8021x_eap_failure' matches a key - # rule. Allowlisted the same way in dfe-transform-vrl, where it is maintained. + # The Meraki event subtype '8021x_eap_failure' matches a key rule. '''pipelines/filebeat/filebeat\.yaml''', - # Uncomment and customise as needed - # '''tests/.*\.py''', - # '''tests/fixtures/.*''', - # '''.env.example''', ] - -# Regex patterns for known false positives -# regexes = [ -# '''YOUR_.*_TOKEN''', -# '''your-.*-token''', -# '''test-token''', -# '''example\.com''', -# ] - -# Stopwords - findings containing these are likely false positives -# stopwords = ["example", "sample", "test", "mock", "fake", "dummy", "placeholder"] diff --git a/.hyperi-ci.yaml b/.hyperi-ci.yaml index 44007b2..c784f00 100644 --- a/.hyperi-ci.yaml +++ b/.hyperi-ci.yaml @@ -6,7 +6,6 @@ # Copyright: (c) 2026 HYPERI PTY LIMITED classification: product -# Project language (auto-detected if not specified) language: rust # Quality checks @@ -14,13 +13,6 @@ quality: enabled: true # Advisory ignores fed to cargo-audit and osv-scanner. ignore: - # GHSA-w9wp-h8wv-79jx / CVE-2026-48504: opentelemetry_sdk 0.31.0 reaches the - # lock only through scalo. The flaw is in BaggagePropagator's header parsing, - # and neither this repo nor scalo registers a Baggage or other text map - # propagator, so it is never called. Recorded as not reachable in the DFE - # threat model (dfe-infra docs/THREAT-MODEL.md, accepted risks). scalo holds - # 0.31 because metrics-exporter-opentelemetry 0.2.1 requires opentelemetry - # ^0.31; tracked in hyperi-io/scalo-rs#281. - tool: osv-scanner id: GHSA-w9wp-h8wv-79jx reason: "CVE-2026-48504, opentelemetry_sdk 0.31.0 via scalo: unreachable, no Baggage propagator registered in dfe-transform-vector or scalo. Not reachable per dfe-infra docs/THREAT-MODEL.md accepted risks. Blocked on metrics-exporter-opentelemetry 0.2.1 requiring opentelemetry ^0.31; tracked in hyperi-io/scalo-rs#281." @@ -30,9 +22,7 @@ test: enabled: true coverage: false rust: - # The metrics tests need process-per-test isolation: a global recorder - # installs once per process, so under cargo test only the first test to - # run gets a live registry. Fail rather than silently degrade to it. + # The metrics tests need a process each: the global recorder installs once per process. nextest: true # A release runs the full tier: the Vector validator cases and the opt-in # Kafka pipelines. tests/TESTING.md says which tests are which. @@ -52,15 +42,7 @@ build: targets: - x86_64-unknown-linux-gnu - aarch64-unknown-linux-gnu - # Tier 2 release-track optimisation. hyperi-ci applies jemalloc + fat LTO - # on the release channel by itself; this section opts in to PGO + BOLT on - # top, and both are gated on that channel (optimize.py:125,129). - # - # What it covers: the supervisor's own binary -- the direct-transport - # bridge, the subprocess watch and the Vector metrics merge. Vector's - # per-record CPU on the bus transport is inside the upstream binary the - # image downloads rather than compiles (scripts/fetch-vector.sh), so no - # PGO or BOLT we run here reaches it. + # PGO and BOLT reach the supervisor's own binary only, not the Vector binary the image downloads. optimize: pgo: enabled: true @@ -71,7 +53,7 @@ build: # the compiler toward startup paths and turns PGO NEGATIVE. duration_secs: 300 bolt: - enabled: true # Linux only; skipped on non-Linux targets + enabled: true # Release (where the artefacts go). The thin chart is assembled from the # emitted contract and ships beside the image. @@ -88,7 +70,4 @@ release: platforms: - linux/amd64 - linux/arm64 - # Vector binary install + data dirs are spliced into the Dockerfile - # by `src/deployment.rs::emit_dockerfile()` (consumer-side post-process - # over scalo's base output). When hyperi-ci's overlay framework - # lands, this moves to `release.container.overlays:` here. + # `src/deployment.rs::emit_dockerfile()` splices the Vector install into the Dockerfile. diff --git a/Cargo.toml b/Cargo.toml index 3ed9779..117fb9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,10 +25,7 @@ path = "src/lib.rs" name = "dfe-transform-vector" path = "src/main.rs" -# PGO workload driver -- built only with `--features pgo-driver`, by -# scripts/pgo-workload.sh during a release-channel Tier 2 build. hyperi-ci -# skips feature-gated bins when it detects and packages binaries, so this one -# never reaches the publish payload. +# PGO workload driver (scripts/pgo-workload.sh), built only with `--features pgo-driver`. [[bin]] name = "pgo-driver" path = "src/bin/pgo_driver.rs" @@ -39,35 +36,9 @@ required-features = ["pgo-driver"] tokio = { version = ">=1.54.1, <2", features = ["full"] } tokio-util = { version = ">=0.7.20, <0.8", features = ["rt"] } -# Shared library (CLI framework, deployment artefact generation, logging) -# -# `expression` compiles the CEL tiers of scalo's transport filters: without it -# a tier 2 or tier 3 filter in config is refused at load. -# -# `health` is REQUIRED for a truthful `/readyz`: the metrics listener only -# consults `HealthRegistry` under that feature, and its other readiness hook -# is snapshotted before the app can set one. -# -# `transport-grpc-vector-compat` carries the direct transport: the supervisor -# speaks scalo's `Transport/Push` to the rest of DFE and Vector's own -# `vector.Vector/PushEvents` to the subprocess, and scalo has both halves of the -# Vector protocol (`VectorCompatClient`, `VectorCompatService`). `lifecycle` -# carries the idle gate a transform with no source topics reports through. -# `worker-batch` carries the `BatchEngine` pipeline the bridge runs each leg on, -# which holds a push until its records are delivered. -# -# `transport-kafka` carries `KafkaConfig`, the security floor `Config::validate` -# holds the generated Kafka source and sink to, and `MESSAGE_MAX_BYTES`, the -# record ceiling the generated sink takes. Only its config is used: the image -# ships no librdkafka, so nothing here may build an rdkafka client. -# -# `scaling` carries the `ScalingPressure` the runtime serves at -# `/scaling/pressure` and writes into the `scaling_pressure` gauge; the -# supervisor drives its circuit gate directly, so it is named here as well as -# arriving through `cli-service`. -# -# The floor moves with `release.helm.library` in .hyperi-ci.yaml: the library -# renders only the contract version its scalo release writes. +# `health` is REQUIRED for a truthful `/readyz`. `transport-kafka` is for its +# config only: the image ships no librdkafka, so nothing may build an rdkafka +# client. The floor moves with `release.helm.library` in .hyperi-ci.yaml. scalo = { version = ">=2.14.29, <3", features = [ "cli-service", "config-reload", @@ -101,8 +72,7 @@ bytes = ">=1.12.1, <2" serde = { version = ">=1.0.229, <2", features = ["derive"] } serde_json = ">=1.0.154, <2" -# JSON Schema derivation for the reflectable config-schema capability -# (scalo-rs#6). Same version range as scalo so cargo unifies to one schemars. +# Config-schema derivation. Same range as scalo so cargo unifies to one schemars. schemars = { version = ">=1.2.3, <2", default-features = false, features = ["std", "derive", "preserve_order"] } # Error handling @@ -116,37 +86,26 @@ tracing-subscriber = { version = ">=0.3.23, <0.4", features = ["env-filter", "js # Metrics metrics = ">=0.24.6, <0.25" -# Note: Vector metrics proxy uses raw TcpStream (no HTTP client crate needed). -# /metrics, /livez and /readyz are served by scalo's MetricsManager listener. - # Unix signals (sending SIGTERM/SIGHUP to child process), and renameat2 to # swap a reload's staged config in whole nix = { version = ">=0.31.3, <0.32", features = ["signal", "process", "fs"] } -# Allocator (Tier 1 release-track optimisation; CI opts in per channel) +# Allocator tikv-jemallocator = { version = ">=0.7.0, <0.8", optional = true } prometheus-parse = ">=0.2.5, <0.3" [features] -# CI (hyperi-ci) opts in via --features jemalloc per release channel. -# Local cargo build uses the system allocator. default = [] jemalloc = ["dep:tikv-jemallocator"] -# The PGO workload driver bin. Needs no dependency the supervisor does not -# already carry, so a production build is unaffected either way. pgo-driver = [] [dev-dependencies] tempfile = ">=3.27.0, <4" tokio-test = ">=0.4.6, <0.5" -# The WS21 filebeat corpus (tests/common/filebeat.rs) is read in memory from -# dfe-transform-vrl's committed tar.gz; chrono compares transformed timestamps -# against the elastic golden outputs. +# Reads dfe-transform-vrl's filebeat corpus tar.gz in memory. flate2 = ">=1.1.10, <2" tar = ">=0.4.46, <0.5" chrono = ">=0.4.45, <0.5" -# transport-kafka-test-support is the run's shared broker container the Kafka -# tests use. scalo = { version = ">=2.14.29, <3", features = [ "transport-kafka", "transport-kafka-test-support", @@ -185,22 +144,18 @@ dbg_macro = "deny" module_name_repetitions = "allow" # #[must_use] goes where dropping the value is a bug, not on every pure function. must_use_candidate = "allow" -# The lints below fire in tests/ (54 sites) and one in main.rs, and the rest of src is clean. -# 6 doc comments, 5 map then unwrap_or chains, 2 let-else candidates. +# The lints below fire in tests/. doc_markdown = "allow" map_unwrap_or = "allow" manual_let_else = "allow" -# 10 raw strings, 8 closures, 8 bare #[ignore] attributes. needless_raw_string_hashes = "allow" redundant_closure_for_method_calls = "allow" ignore_without_reason = "allow" -# 2 float compares, 2 file extension compares, 2 similar names, 2 Duration subtractions, 2 empty asserts. float_cmp = "allow" case_sensitive_file_extension_comparisons = "allow" similar_names = "allow" unchecked_time_subtraction = "allow" assert_is_empty = "allow" -# 1 single-arm match, 1 filter_map then next, 1 push_str of a format!, and 2 functions over 150 lines (the startup sequence in main.rs, one e2e test). single_match_else = "allow" filter_map_next = "allow" format_push_string = "allow" diff --git a/clippy.toml b/clippy.toml index 96ed9df..a363772 100644 --- a/clippy.toml +++ b/clippy.toml @@ -6,53 +6,13 @@ # License: BUSL-1.1 # Copyright: (c) 2026 HYPERI PTY LIMITED # -# Clippy configuration file. Lint levels are set in Cargo.toml [lints.clippy]. -# This file configures thresholds and behaviour. +# Lint levels are in Cargo.toml [lints.clippy]. -# ----------------------------------------------------------------------------- -# Complexity Thresholds -# ----------------------------------------------------------------------------- - -# Maximum number of function arguments before warning too-many-arguments-threshold = 7 - -# Cognitive complexity threshold (cyclomatic complexity) cognitive-complexity-threshold = 25 - -# Type complexity threshold (nested generics) type-complexity-threshold = 350 - -# Maximum lines in a function before warning too-many-lines-threshold = 150 # unwrap_used / expect_used stay denied in shipped code, not in #[test] or #[cfg(test)] allow-unwrap-in-tests = true allow-expect-in-tests = true - -# ----------------------------------------------------------------------------- -# Style Preferences -# ----------------------------------------------------------------------------- - -# MSRV (Minimum Supported Rust Version) - clippy uses this for suggestions -# msrv = "1.85" - -# ----------------------------------------------------------------------------- -# Documentation -# ----------------------------------------------------------------------------- -# Clippy lint levels should be configured in Cargo.toml: -# -# [lints.clippy] -# pedantic = "warn" -# nursery = "warn" -# unwrap_used = "deny" -# expect_used = "deny" -# panic = "deny" -# dbg_macro = "deny" # Deny in CI, allow locally -# todo = "warn" -# unimplemented = "warn" -# -# # Allow common pedantic false positives -# module_name_repetitions = "allow" -# must_use_candidate = "allow" -# missing_errors_doc = "allow" -# missing_panics_doc = "allow" diff --git a/deny.toml b/deny.toml index a3206de..942fd36 100644 --- a/deny.toml +++ b/deny.toml @@ -31,8 +31,6 @@ allow = [ multiple-versions = "warn" wildcards = "deny" skip = [ - # prometheus-parse 0.2.5 (latest, Dec 2023) pins itertools ^0.12; everything - # else resolves to 0.14 through prost-derive. Nothing upstream to move to. { crate = "itertools@0.12.1", reason = "prometheus-parse 0.2.5 pins ^0.12" }, ] diff --git a/docs/internals.md b/docs/internals.md index 02a1762..020fcbc 100644 --- a/docs/internals.md +++ b/docs/internals.md @@ -474,8 +474,7 @@ vector: | `disabled` | Skip check entirely. | Version check failures are logged at startup. No runtime version metrics are -currently emitted — this is deferred until the scalo `version-check` feature -is adopted. +emitted. ### 7.2 Version Update Strategy diff --git a/docs/librdkafka.md b/docs/librdkafka.md index ea997a5..4d8bebc 100644 --- a/docs/librdkafka.md +++ b/docs/librdkafka.md @@ -46,8 +46,8 @@ after the whole merge, so `librdkafka_options` cannot reach them: | `sasl.mechanism` | `{source,sink}.sasl.mechanism` | SASL is on | | `enable.ssl.certificate.verification` | `{source,sink}.tls.skip_verify` | TLS is on and verification is skipped | -Setting one of these in `librdkafka_options` used to be discarded in silence. -`config-check` now refuses the config and names the big dial that owns the key. +`config-check` refuses a config that sets one of these in `librdkafka_options`, +and names the big dial that owns the key. The conditions above are part of the rule: with SASL off nothing derives `sasl.mechanism`, so setting it by hand there is still allowed. @@ -201,7 +201,7 @@ baseline). | Setting | Side | Value | Reason | |---------|------|-------|--------| -| `queue.buffering.max.kbytes` | producer | `262144` (256 MiB) | Pods typically have 2-4 GiB memory. Default 1 GiB producer queue is too large. | +| `queue.buffering.max.kbytes` | producer | `262144` (256 MiB) | The default 1 GiB producer queue is too large for a transform-vector pod. | | `enable.auto.commit` | consumer | `true` | Vector's kafka source stores offsets on delivery and leaves the periodic flush to librdkafka's commit timer, which the baseline's `false` never arms. Vector still commits on rebalance and clean shutdown, so the baseline stalled reported lag between those points rather than losing offsets. Lag is what KEDA scales on here. | | `message.max.bytes` | producer | `16777216` (16 MiB), scalo's `MESSAGE_MAX_BYTES` | The record ceiling every other stage's producer and every topic scalo creates carry; librdkafka's own `1000000` refuses a larger record. Written only where neither layer 1 nor `sink.librdkafka_options` sets the key, so either of those still decides it. The size cap in front of the sink reads the same value. | diff --git a/pipelines/filebeat/README.md b/pipelines/filebeat/README.md index d3e1f9a..9e40727 100644 --- a/pipelines/filebeat/README.md +++ b/pipelines/filebeat/README.md @@ -16,7 +16,7 @@ dfe-transform-vector: the same VRL dfe-transform-vrl runs, wrapped in a Vector this directory and the pipeline runs -- there is nothing to author. > **INTERIM.** Elastic compatibility is being replaced by -> `dfe-transform-elastic` (Rust-native, currently in beta). New integrations +> `dfe-transform-elastic` (Rust-native). New integrations > should NOT build on this pipeline. ## Using it diff --git a/pipelines/filebeat/filebeat.yaml b/pipelines/filebeat/filebeat.yaml index e9cc2df..f4d58e4 100644 --- a/pipelines/filebeat/filebeat.yaml +++ b/pipelines/filebeat/filebeat.yaml @@ -58,8 +58,8 @@ transforms: # # INTERIM: this pipeline keeps DFE 2.1 filebeat feeds working on # dfe-transform-vrl. Elastic compatibility is being replaced by - # dfe-transform-elastic (Rust-native, currently in beta); new integrations - # should NOT build on this file. + # dfe-transform-elastic (Rust-native), and new integrations should NOT + # build on this file. # # Deliberate departures from the 2.1 templates: # - geoip enrichment is NOT ported: dfe-loader owns geoip enrichment in diff --git a/rustfmt.toml b/rustfmt.toml index 13d734e..b5ead0c 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -6,28 +6,11 @@ # License: BUSL-1.1 # Copyright: (c) 2026 HYPERI PTY LIMITED -# Rust edition for parsing edition = "2024" - -# Line width (100 is common for modern displays) max_width = 100 - -# Indentation tab_spaces = 4 hard_tabs = false - -# Use default heuristics for formatting choices use_small_heuristics = "Default" - -# Reorder imports alphabetically reorder_imports = true - -# Use field init shorthand where possible: Foo { x } instead of Foo { x: x } use_field_init_shorthand = true - -# Use try! shorthand: ? instead of try!() use_try_shorthand = true - -# Nightly-only (uncomment when stable rustfmt supports these) -# imports_granularity = "Module" -# group_imports = "StdExternalCrate" diff --git a/src/config/generate.rs b/src/config/generate.rs index 57ebf16..ea34af7 100644 --- a/src/config/generate.rs +++ b/src/config/generate.rs @@ -508,8 +508,8 @@ const SERVICE_CONSUMER_OVERRIDES: &[(&str, &str)] = &[("enable.auto.commit", "tr /// Service-specific producer librdkafka overrides for transform-vector. /// /// - `queue.buffering.max.kbytes`: caps the local producer queue to 256 MiB -/// (librdkafka default is 1 GiB) because transform-vector pods typically have -/// 2-4 GiB memory. +/// (librdkafka default is 1 GiB), which is too large for a transform-vector +/// pod. /// - `enable.idempotence`: the sink retries without limit, and a retry on a /// non-idempotent producer can reorder and duplicate records within a /// partition. librdkafka then sets `acks=all` and at most 5 requests in diff --git a/src/config/wiring.rs b/src/config/wiring.rs index 814d65d..6bbca5e 100644 --- a/src/config/wiring.rs +++ b/src/config/wiring.rs @@ -72,7 +72,7 @@ pub struct WiringResult { /// /// # Errors /// -/// Currently never fails: every input yields a component list. +/// Never fails: every input yields a component list. pub fn extract_components(transforms: &[LoadedTransform]) -> Result> { let mut components = Vec::new(); @@ -109,7 +109,7 @@ pub fn extract_components(transforms: &[LoadedTransform]) -> Result) -> Result { if components.is_empty() { // No transforms: source wires directly to sink diff --git a/src/deployment.rs b/src/deployment.rs index 07b2527..f4ec420 100644 --- a/src/deployment.rs +++ b/src/deployment.rs @@ -125,9 +125,9 @@ pub fn contract() -> DeploymentContract { } })), depends_on: vec!["kafka".into()], - // `KedaContract` is `#[non_exhaustive]` (scalo 2.8.13) so it can no - // longer be built via a struct literal. Build the app's real KEDA - // values into a `KedaConfig` and convert; the new `scaling_pressure_*` + // `KedaContract` is `#[non_exhaustive]`, so it cannot be built via a + // struct literal. Build the app's real KEDA + // values into a `KedaConfig` and convert; the `scaling_pressure_*` // trigger fields stay at their defaults (OFF -- the Prometheus // serverAddress is cluster-specific and must be set before enabling). keda: Some( diff --git a/src/main.rs b/src/main.rs index b6c91ad..fc1a924 100644 --- a/src/main.rs +++ b/src/main.rs @@ -325,8 +325,7 @@ async fn run_transform_service( let started_at = Instant::now(); // Drive the lifecycle-state gauge from lifecycle transitions - // (previously updated on every /metrics scrape; the runtime's - // server doesn't give us a pre-scrape hook, so we push instead). + // (the runtime's server has no pre-scrape hook, so we push). spawn_lifecycle_gauge_task(metrics.clone(), &lifecycle); // Drive scalo's ScalingPressure circuit gate from lifecycle diff --git a/src/vector/binary.rs b/src/vector/binary.rs index 4d653ce..57c92c9 100644 --- a/src/vector/binary.rs +++ b/src/vector/binary.rs @@ -405,8 +405,7 @@ mod tests { #[test] fn stable_on_the_real_release_list_today() { - // Only 0.56.0 exists on that line, so stable is 0.56.0 -- the version - // this image now pre-ships. + // Only 0.56.0 exists on that line, so stable is 0.56.0. let r = vs(&["0.57.0", "0.56.0", "0.55.0", "0.54.0"]); assert_eq!(select_stable(&r).unwrap().to_string(), "0.56.0"); } diff --git a/tests/TESTING.md b/tests/TESTING.md index 82de517..f4a620a 100644 --- a/tests/TESTING.md +++ b/tests/TESTING.md @@ -15,9 +15,8 @@ There is no mode switch. `KafkaFixture::acquire` resolves a broker on its own: authenticate against it. Faster, and a real multi-broker cluster. 2. **The run's shared broker**, otherwise -- one single-node Apache Kafka that scalo's `shared_service` starts for the whole run and every test process - joins. The image is scalo's `KAFKA_IMAGE`, - `apache/kafka:4.3.1@sha256:77e3df9054047a88b520d0cc46e16696d3b22022e1d580aeccd2632df6532837` - as of scalo 2.14.25. The first test that needs it starts it on the local + joins. The image is scalo's `KAFKA_IMAGE`. + The first test that needs it starts it on the local Docker daemon, locally and in CI alike, and a watcher removes it when the run's last test process exits. 3. **Skip**, when neither is available. In CI that is an assertion failure diff --git a/tests/integration/config.rs b/tests/integration/config.rs index 1120887..92d0e08 100644 --- a/tests/integration/config.rs +++ b/tests/integration/config.rs @@ -1774,7 +1774,7 @@ fn the_emitted_schema_lists_every_transport_name_the_file_reads() { /// /// Over a big dial the derived-key check refuses it outright. With the big /// dials off, the floor judges the typed protocol, PLAINTEXT, which production -/// refuses whatever the raw map says -- scalo 2.13 judges typed fields only. +/// refuses whatever the raw map says -- scalo judges typed fields only. #[test] fn a_raw_librdkafka_security_override_that_weakens_the_transport_is_refused() { let mut config = full_config(None);