apiVersion: jenkins.io/v1 kind: PipelineActivity metadata: annotations: lighthouse.jenkins-x.io/cloneURI: https://github.com/greencapitaltrade/bifrost.git lighthouse.jenkins-x.io/job: release pipeline.jenkins-x.io/traceID: e5754d87cb23f5debe0f90e2a2ec3239 creationTimestamp: "2026-04-11T11:45:33Z" generation: 8 labels: branch: main build: "518" context: release created-by-lighthouse: "true" event-GUID: eaefc94c-359b-11f1-9635-fbd5f299c1a4 lighthouse.jenkins-x.io/baseSHA: 6b08146692326ca8dc0624b7de25e4b95dd7e4bb lighthouse.jenkins-x.io/branch: main lighthouse.jenkins-x.io/buildNum: "1775907932928" lighthouse.jenkins-x.io/context: release lighthouse.jenkins-x.io/id: apitaltrade-bifrost-main-release-sn7pp lighthouse.jenkins-x.io/job: release lighthouse.jenkins-x.io/lastCommitSHA: 6b08146692326ca8dc0624b7de25e4b95dd7e4bb lighthouse.jenkins-x.io/refs.org: greencapitaltrade lighthouse.jenkins-x.io/refs.repo: bifrost lighthouse.jenkins-x.io/type: postsubmit owner: greencapitaltrade podName: apitaltrade-bifrost-main-release-cbh6z-from-build-pack-pod provider: github repository: bifrost tekton.dev/pipeline: apitaltrade-bifrost-main-release-cbh6z managedFields: - apiVersion: jenkins.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:labels: f:branch: {} f:context: {} f:owner: {} f:provider: {} f:repository: {} f:spec: f:lastCommitMessage: {} f:lastCommitSHA: {} f:releaseNotesURL: {} f:version: {} manager: jx-changelog-0.10.18 operation: Update time: "2026-04-11T11:50:41Z" - apiVersion: jenkins.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:lighthouse.jenkins-x.io/cloneURI: {} f:lighthouse.jenkins-x.io/job: {} f:pipeline.jenkins-x.io/traceID: {} f:labels: .: {} f:build: {} f:created-by-lighthouse: {} f:event-GUID: {} f:lighthouse.jenkins-x.io/baseSHA: {} f:lighthouse.jenkins-x.io/branch: {} f:lighthouse.jenkins-x.io/buildNum: {} f:lighthouse.jenkins-x.io/context: {} f:lighthouse.jenkins-x.io/id: {} f:lighthouse.jenkins-x.io/job: {} f:lighthouse.jenkins-x.io/lastCommitSHA: {} f:lighthouse.jenkins-x.io/refs.org: {} f:lighthouse.jenkins-x.io/refs.repo: {} f:lighthouse.jenkins-x.io/type: {} f:podName: {} f:tekton.dev/pipeline: {} f:spec: .: {} f:baseSHA: {} f:batchPipelineActivity: {} f:build: {} f:buildLogsUrl: {} f:completedTimestamp: {} f:context: {} f:gitBranch: {} f:gitOwner: {} f:gitRepository: {} f:gitUrl: {} f:message: {} f:pipeline: {} f:startedTimestamp: {} f:status: {} f:steps: {} manager: jx-build-controller operation: Update time: "2026-04-11T11:52:02Z" name: greencapitaltrade-bifrost-main-518 namespace: jx resourceVersion: "1089116556" uid: 9ffdee5c-40d7-460f-8750-ab741ad7a3b2 spec: baseSHA: 6b08146692326ca8dc0624b7de25e4b95dd7e4bb batchPipelineActivity: {} build: "518" buildLogsUrl: azblob://logs/jenkins-x/logs/greencapitaltrade/bifrost/main/518.log completedTimestamp: "2026-04-11T11:51:54Z" context: release gitBranch: main gitOwner: greencapitaltrade gitRepository: bifrost gitUrl: https://github.com/greencapitaltrade/bifrost.git lastCommitMessage: | fix(iot): publish config updates to Kafka instead of direct HTTP to Deadpool Bifrost's fleet_iot_vehicle_config._send_config_to_device() was making a direct HTTP POST to http://deadpool:8080/internal/iot/send_config, but that endpoint was removed from the Deadpool Helm chart in November 2025 when the per-protocol TCP deployment refactor landed. The only thing still serving `deadpool:8080` in production is a 5-month-old orphaned deployment (deadpool-deadpool-http-0.24.3) that returns 404 on that route anyway, so every config push from Bifrost has been silently failing. The fix aligns with the architecture already documented in CLAUDE.md: command flow goes over Kafka, not synchronous HTTP. What changes: 1. models/__init__.py: import the existing kafka_publisher model — it was in the tree but never registered, which is why nothing had been using it. 2. models/fleet_iot_vehicle_config.py: rewrite _send_config_to_device() to publish to the `deadpool.iot.commands` topic via fleet.kafka.publisher._send_message(). Message shape matches the DeviceCommand struct the Deadpool iot-consumer already deserializes (log_id, device_id, protocol, command_code, parameters, timestamp, company_id). Device ID is used as the Kafka message key for sticky partitioning per device. 3. security/ir.model.access.csv: add access rules for fleet.kafka.publisher so fleet managers and admins can use it (previously the model file existed in isolation with no ACLs). 4. tests/test_send_config_via_kafka.py: 6 tests covering - source does not reference the dead HTTP URL - method uses fleet.kafka.publisher - command_code is 'update_config' - publishes to the 'deadpool.iot.commands' topic name that the consumer subscribes to - the kafka_publisher model is actually registered in the addon - publisher has the _send_message and publish_command methods Architecture flow after this change: Bifrost _send_config_to_device() → Kafka produce to deadpool.iot.commands → iot-consumer process_command_message() → validate_command_execution with Bifrost (idempotency) → processor.queue_for_dispatch("update_config", parameters) → per-protocol encoder (e.g. GT06: TIMER,# wire command) → Redis LPUSH to TCP server instance → device The Deadpool-side support for the 'update_config' command code on GT06 is in a separate PR against the deadpool repo. Related: the orphaned deadpool-deadpool-http deployment in jx-production can now be safely deleted; no Bifrost code path reaches it any more. Co-Authored-By: Claude Opus 4.6 (1M context) lastCommitSHA: b425e9c4a356d4e8adef64c42381170af43607fa message: 'Tasks Completed: 1 (Failed: 0, Cancelled 0), Skipped: 0' pipeline: greencapitaltrade/bifrost/main releaseNotesURL: https://github.com/greencapitaltrade/bifrost/releases/tag/v6.49.4 startedTimestamp: "2026-04-11T11:45:33Z" status: Succeeded steps: - kind: Stage stage: completedTimestamp: "2026-04-11T11:51:54Z" name: from build pack startedTimestamp: "2026-04-11T11:45:37Z" status: Succeeded steps: - completedTimestamp: "2026-04-11T11:45:58Z" name: Git Clone startedTimestamp: "2026-04-11T11:45:37Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:02Z" name: Next Version startedTimestamp: "2026-04-11T11:45:59Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:07Z" name: Jx Variables startedTimestamp: "2026-04-11T11:46:03Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:08Z" name: Setup Npm Nexus startedTimestamp: "2026-04-11T11:46:08Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:11Z" name: Setup Pip Cache startedTimestamp: "2026-04-11T11:46:08Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:12Z" name: Process Config Templates startedTimestamp: "2026-04-11T11:46:11Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:12Z" name: Update Fleet Management Version startedTimestamp: "2026-04-11T11:46:12Z" status: Succeeded - completedTimestamp: "2026-04-11T11:46:14Z" name: Check Registry startedTimestamp: "2026-04-11T11:46:12Z" status: Succeeded - completedTimestamp: "2026-04-11T11:50:17Z" name: Build Container Build startedTimestamp: "2026-04-11T11:46:14Z" status: Succeeded - completedTimestamp: "2026-04-11T11:50:41Z" name: Promote Changelog startedTimestamp: "2026-04-11T11:50:17Z" status: Succeeded - completedTimestamp: "2026-04-11T11:50:45Z" name: Promote Helm Release startedTimestamp: "2026-04-11T11:50:42Z" status: Succeeded - completedTimestamp: "2026-04-11T11:51:54Z" name: Promote Jx Promote startedTimestamp: "2026-04-11T11:50:46Z" status: Succeeded - kind: Promote promote: environment: staging pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/3459 startedTimestamp: "2026-04-11T11:51:26Z" status: Succeeded startedTimestamp: "2026-04-11T11:51:26Z" status: Succeeded - kind: Promote promote: environment: production pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/3460 startedTimestamp: "2026-04-11T11:51:51Z" status: Succeeded startedTimestamp: "2026-04-11T11:51:51Z" status: Succeeded version: 6.49.4 status: {}