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: f0c753de24b458bcaceafb5f2c4df1c9 creationTimestamp: "2026-05-18T07:25:18Z" generation: 8 labels: branch: main build: "89" context: release created-by-lighthouse: "true" event-GUID: b22192b0-528a-11f1-9111-e8aea9dcb8d8 lighthouse.jenkins-x.io/baseSHA: 9baa535a0599313363ea01f1d1abee6d04eeee2e lighthouse.jenkins-x.io/branch: main lighthouse.jenkins-x.io/buildNum: "1779089118312" lighthouse.jenkins-x.io/context: release lighthouse.jenkins-x.io/id: apitaltrade-bifrost-main-release-nw8dl lighthouse.jenkins-x.io/job: release lighthouse.jenkins-x.io/lastCommitSHA: 9baa535a0599313363ea01f1d1abee6d04eeee2e 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-nl9r7-from-build-pack-pod provider: github repository: bifrost tekton.dev/pipeline: apitaltrade-bifrost-main-release-nl9r7 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-05-18T07:31:20Z" - 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-05-18T07:32:43Z" name: greencapitaltrade-bifrost-main-89 namespace: jx resourceVersion: "28618793" uid: bd3c9505-cc8a-41a9-bc41-6d44a8549473 spec: baseSHA: 9baa535a0599313363ea01f1d1abee6d04eeee2e batchPipelineActivity: {} build: "89" buildLogsUrl: s3://logs-gct-prod-20260425045301534100000007/jenkins-x/logs/greencapitaltrade/bifrost/main/89.log completedTimestamp: "2026-05-18T07:32:36Z" context: release gitBranch: main gitOwner: greencapitaltrade gitRepository: bifrost gitUrl: https://github.com/greencapitaltrade/bifrost.git lastCommitMessage: | feat(iot): per-device parked heartbeat with drift detection Adds the Bifrost side of greencapitaltrade/bifrost#140 — short-TAU PSM workflow co-designed with the VoltCred A7677S firmware. Per-device asset.iot.device.heartbeat_sec lets operators trade battery life against command latency (300s for high-value freight, 3600s for battery-champion fleets, 600s default). Configured value is pushed to the device as a TLV-encoded CMD_CONFIG_WRITE; the firmware echoes its effective value back via the retained vc//devcfg-reported topic, which Deadpool turns into update_reported_heartbeat() on this model. heartbeat_drift (stored, computed from configured vs reported) drives both the dashboard indicator and a new hourly cron that re-pushes the config to any drifted device that has had at least 2× heartbeat to ack. The cron is idempotent — asset.iot.command.execute deduplicates pending CONFIG_WRITEs in its 5-minute window. config_write command and the wasp IoT type are seeded so the catalogue exists at install time, matching the protocol identifier Deadpool emits ("wasp"/"terra"). Drive-by: asset.py _compute_finance_status referenced an undefined asset_rec in the second line of the loop (artifact of the vehicle→asset rename in bffa1e6a6). Fixed in this PR because it blocked the new tests — without the fix every code path that touches asset.asset crashes during recompute. Tests: addons/asset_management/tests/test_heartbeat_config.py — 10 tests covering drift compute, TLV shape, cron grace window, re-push failure isolation, and the Deadpool ingestion entrypoint. All pass in bifrost-test. Co-Authored-By: Claude Opus 4.7 lastCommitSHA: 913a428de900a19280832fc410fbc991a7d901f9 message: 'Tasks Completed: 1 (Failed: 0, Cancelled 0), Skipped: 0' pipeline: greencapitaltrade/bifrost/main releaseNotesURL: https://github.com/greencapitaltrade/bifrost/releases/tag/v6.62.2 startedTimestamp: "2026-05-18T07:25:18Z" status: Succeeded steps: - kind: Stage stage: completedTimestamp: "2026-05-18T07:32:36Z" name: from build pack startedTimestamp: "2026-05-18T07:25:34Z" status: Succeeded steps: - completedTimestamp: "2026-05-18T07:25:58Z" name: Git Clone startedTimestamp: "2026-05-18T07:25:34Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:03Z" name: Next Version startedTimestamp: "2026-05-18T07:25:58Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:07Z" name: Jx Variables startedTimestamp: "2026-05-18T07:26:03Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:08Z" name: Setup Npm Nexus startedTimestamp: "2026-05-18T07:26:07Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:14Z" name: Setup Pip Cache startedTimestamp: "2026-05-18T07:26:09Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:15Z" name: Process Config Templates startedTimestamp: "2026-05-18T07:26:14Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:17Z" name: Update Fleet Management Version startedTimestamp: "2026-05-18T07:26:15Z" status: Succeeded - completedTimestamp: "2026-05-18T07:26:18Z" name: Check Registry startedTimestamp: "2026-05-18T07:26:16Z" status: Succeeded - completedTimestamp: "2026-05-18T07:30:56Z" name: Build Container Build startedTimestamp: "2026-05-18T07:26:19Z" status: Succeeded - completedTimestamp: "2026-05-18T07:31:20Z" name: Promote Changelog startedTimestamp: "2026-05-18T07:30:56Z" status: Succeeded - completedTimestamp: "2026-05-18T07:31:25Z" name: Promote Helm Release startedTimestamp: "2026-05-18T07:31:20Z" status: Succeeded - completedTimestamp: "2026-05-18T07:32:36Z" name: Promote Jx Promote startedTimestamp: "2026-05-18T07:31:26Z" status: Succeeded - kind: Promote promote: environment: staging pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/3898 startedTimestamp: "2026-05-18T07:32:07Z" status: Succeeded startedTimestamp: "2026-05-18T07:32:07Z" status: Succeeded - kind: Promote promote: environment: production pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/3899 startedTimestamp: "2026-05-18T07:32:33Z" status: Succeeded startedTimestamp: "2026-05-18T07:32:33Z" status: Succeeded version: 6.62.2 status: {}