From 21157b4796e71b11aeb441136a9430c78929b7de Mon Sep 17 00:00:00 2001 From: Saurabh Jain Date: Fri, 8 May 2026 20:23:44 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(telemetry):=20drop=20profile=20field=20?= =?UTF-8?q?=E2=80=94=20collides=20with=20governance=20env=20var?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v1 telemetry schema added a `profile` payload field sourced from `AXONFLOW_PROFILE`. That env var was already in use for governance enforcement (allowlist `dev|default|strict|compliance`, ADR-036), and the v1 telemetry validator only accepted `dev|prod|unknown` — so any customer setting `AXONFLOW_PROFILE=strict` or `=compliance` for governance had their telemetry pings rejected with HTTP 400. Drop the field entirely. The `deployment_mode` dimension already carries the topology signal `profile` was meant to add, and `AXONFLOW_PROFILE` reverts to its single governance-only purpose. - Remove env-var read + payload field + doc comment in TelemetryReporter. - Tests: assert `profile` is ABSENT on the wire (stronger than the previous `equals("unknown")` assertions; actively guards against the field re-appearing). - Bump pom.xml + the two example poms to 8.0.1. - CHANGELOG entry under [8.0.1]. Refs: #2033 Signed-off-by: Saurabh Jain --- CHANGELOG.md | 13 +++++++++++++ examples/explain-decision/pom.xml | 2 +- examples/list-decisions/pom.xml | 2 +- pom.xml | 2 +- .../sdk/telemetry/TelemetryReporter.java | 7 ------- .../sdk/telemetry/TelemetryReporterTest.java | 4 ++-- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e3a34d..3ff5ec0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,19 @@ All notable changes to the AxonFlow Java SDK will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [8.0.1] - 2026-05-08 — Drop telemetry `profile` field + +### Removed + +- **Telemetry `profile` field** — collided with existing governance + `AXONFLOW_PROFILE` env var (allowlist `dev|default|strict|compliance`). + The v1 telemetry validator only accepted `dev|prod|unknown`, so any + customer setting `AXONFLOW_PROFILE=strict` or `=compliance` for + governance enforcement would have had their telemetry pings rejected + with HTTP 400. Removing the field reverts `AXONFLOW_PROFILE` to its + single governance purpose. The `deployment_mode` dimension already + carries the topology signal `profile` was meant to add. + ## [8.0.0] - 2026-05-08 — Decision history API + telemetry simplification **Major release.** The headline feature is the new decision-history client diff --git a/examples/explain-decision/pom.xml b/examples/explain-decision/pom.xml index f778def..84b91f2 100644 --- a/examples/explain-decision/pom.xml +++ b/examples/explain-decision/pom.xml @@ -25,7 +25,7 @@ com.getaxonflow axonflow-sdk - 8.0.0 + 8.0.1 diff --git a/examples/list-decisions/pom.xml b/examples/list-decisions/pom.xml index 87c5214..e56608a 100644 --- a/examples/list-decisions/pom.xml +++ b/examples/list-decisions/pom.xml @@ -24,7 +24,7 @@ com.getaxonflow axonflow-sdk - 8.0.0 + 8.0.1 diff --git a/pom.xml b/pom.xml index b4cc631..ec88906 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.getaxonflow axonflow-sdk - 8.0.0 + 8.0.1 jar AxonFlow Java SDK diff --git a/src/main/java/com/getaxonflow/sdk/telemetry/TelemetryReporter.java b/src/main/java/com/getaxonflow/sdk/telemetry/TelemetryReporter.java index 633a87d..8d1e7db 100644 --- a/src/main/java/com/getaxonflow/sdk/telemetry/TelemetryReporter.java +++ b/src/main/java/com/getaxonflow/sdk/telemetry/TelemetryReporter.java @@ -235,13 +235,6 @@ static String buildPayload( root.put("instance_id", UUID.randomUUID().toString()); - // v1 schema profile dimension. Free-form deployment classifier sourced from - // AXONFLOW_PROFILE; "unknown" when unset. Analytics dimension only. - String profileEnv = System.getenv("AXONFLOW_PROFILE"); - String profile = - (profileEnv == null || profileEnv.trim().isEmpty()) ? "unknown" : profileEnv.trim(); - root.put("profile", profile); - // Stream classifier: sandbox-mode clients self-tag so analytics can distinguish dev/test // pings from production. Production-mode (and other modes) omit the field entirely so the // server defaults to "heartbeat" — preserving byte-identical wire shape relative to v7.x diff --git a/src/test/java/com/getaxonflow/sdk/telemetry/TelemetryReporterTest.java b/src/test/java/com/getaxonflow/sdk/telemetry/TelemetryReporterTest.java index 6e46abc..5ce9f89 100644 --- a/src/test/java/com/getaxonflow/sdk/telemetry/TelemetryReporterTest.java +++ b/src/test/java/com/getaxonflow/sdk/telemetry/TelemetryReporterTest.java @@ -77,7 +77,7 @@ void testPayloadFormat() throws Exception { assertThat(root.get("runtime_version").asText()).isEqualTo(System.getProperty("java.version")); // v1 schema: 2-arg buildPayload defaults deployment_mode to "unknown". assertThat(root.get("deployment_mode").asText()).isEqualTo("unknown"); - assertThat(root.get("profile").asText()).isEqualTo("unknown"); + assertThat(root.has("profile")).isFalse(); assertThat(root.get("features").isArray()).isTrue(); assertThat(root.get("features").size()).isEqualTo(0); assertThat(root.get("instance_id").asText()).isNotEmpty(); @@ -164,7 +164,7 @@ void testCustomEndpoint(WireMockRuntimeInfo wmRuntimeInfo) throws Exception { // v1 schema: deployment_mode classifies from sdk endpoint host; localhost // resolves to self_hosted (the v1 allowlist removes the production label). assertThat(body.get("deployment_mode").asText()).isEqualTo("self_hosted"); - assertThat(body.get("profile").asText()).isEqualTo("unknown"); + assertThat(body.has("profile")).isFalse(); assertThat(body.get("instance_id").asText()).isNotEmpty(); // production-mode payloads still omit stream on the wire. assertThat(body.has("stream")).isFalse(); From a2d24b4f14a30aa0ffe1c61fada30d2407ce892a Mon Sep 17 00:00:00 2001 From: Saurabh Jain Date: Fri, 8 May 2026 20:26:58 +0200 Subject: [PATCH 2/2] chore: retrigger CI after [skip-runtime-e2e] title update Signed-off-by: Saurabh Jain