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: a32cc7d3ba501293db3aab139b6ab1aa creationTimestamp: "2026-08-09T07:30:00Z" generation: 8 labels: branch: main build: "201" context: release created-by-lighthouse: "true" event-GUID: 1a534a0c-93c4-11f1-87cf-edd192cdf3e9 lighthouse.jenkins-x.io/baseSHA: d5593cbf3a9f3d6967c312dc1840495c59fb1428 lighthouse.jenkins-x.io/branch: main lighthouse.jenkins-x.io/buildNum: "1786260600331" lighthouse.jenkins-x.io/context: release lighthouse.jenkins-x.io/id: apitaltrade-bifrost-main-release-vmkxx lighthouse.jenkins-x.io/job: release lighthouse.jenkins-x.io/lastCommitSHA: d5593cbf3a9f3d6967c312dc1840495c59fb1428 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-n7q8p-from-build-pack-pod provider: github repository: bifrost tekton.dev/pipeline: apitaltrade-bifrost-main-release 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.29 operation: Update time: "2026-08-09T07:35:06Z" - 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-08-09T07:37:39Z" name: greencapitaltrade-bifrost-main-201 namespace: jx resourceVersion: "255048953" uid: 04ba7270-1b0c-474e-a4dc-2cc77337b08f spec: baseSHA: d5593cbf3a9f3d6967c312dc1840495c59fb1428 batchPipelineActivity: {} build: "201" buildLogsUrl: s3://logs-gct-prod-20260425045301534100000007/jenkins-x/logs/greencapitaltrade/bifrost/main/201.log completedTimestamp: "2026-08-09T07:37:32Z" context: release gitBranch: main gitOwner: greencapitaltrade gitRepository: bifrost gitUrl: https://github.com/greencapitaltrade/bifrost.git lastCommitMessage: | feat(asset): make the IoT feature registry the key-to-capability index Onboarding an IoT device family required a Bifrost release: a new capability meant an `asset.iot.type.feature_` boolean column, an entry in a hard-coded FEATURE_CODE_MAP, and an edit to a seed XML that had no views and no ACL rows behind it. Deadpool needs a parser change per protocol because frame formats genuinely differ; Bifrost should not. Capabilities are now rows. `asset.iot.type.feature_ids` replaces the thirteen booleans and the map, `asset.iot.feature` gets an admin UI with its state keys inline, and `field_name` is globally unique so an incoming Deadpool measurement key resolves to exactly one feature. Devices are credited with a monitoring feature by reporting one of its keys; control features stay declared, since a relay that has never been commanded reports nothing and silence is not absence. What this was hiding, measured on production (368 devices): * asset_iot_feature_data held 0 rows, so get_state_payload() returned [] for the entire fleet. The seed runs from post_init_hook, which Odoo executes on install only -- never on upgrade -- and the module predates the hook. The migration runs it. * gt06 (325 devices) declared no ignition-bearing feature while every one of them reported `ignition` each frame, so derive_iot_status() could never resolve past 'idle'. * 8 of 21 registered features were unreachable from any type flag. * The registry declared 59 keys; Deadpool's v1 envelope emits 16, and only 4 names overlapped. The 12 it does emit -- battery_soc, battery_voltage, ext_voltage, current_a, charging, odometer, gps_valid and the rest -- were declared nowhere. * `ignition`, `ignition_on` and `acc_status` were three names for one stored boolean; Deadpool had already collapsed them upstream. The stale copies on 202 devices froze on 2026-08-02 and by 2026-08-08 disagreed with the live value on 122 of them. * `voltage`, `current` and `soc` were each declared twice with contradictory units (V vs mV, A vs centi-A) and emitted by nothing. The last_ignition / last_voltage / last_ext_voltage / last_battery_voltage mirror columns are the remaining half of this and are not touched here: asset_iot_api.py, asset_api.py and the wasp delta reconstruction still read them to build live payloads, so retiring them changes the asset API surface and belongs in its own change. lastCommitSHA: 7945a28621f06c81a447c50a3da4be3ce1008309 message: 'Tasks Completed: 1 (Failed: 0, Cancelled 0), Skipped: 0' pipeline: greencapitaltrade/bifrost/main releaseNotesURL: https://github.com/greencapitaltrade/bifrost/releases/tag/v6.93.0 startedTimestamp: "2026-08-09T07:30:00Z" status: Succeeded steps: - kind: Stage stage: completedTimestamp: "2026-08-09T07:37:32Z" name: from build pack startedTimestamp: "2026-08-09T07:30:04Z" status: Succeeded steps: - completedTimestamp: "2026-08-09T07:30:29Z" name: Git Clone startedTimestamp: "2026-08-09T07:30:04Z" status: Succeeded - completedTimestamp: "2026-08-09T07:30:36Z" name: Next Version startedTimestamp: "2026-08-09T07:30:30Z" status: Succeeded - completedTimestamp: "2026-08-09T07:30:41Z" name: Jx Variables startedTimestamp: "2026-08-09T07:30:37Z" status: Succeeded - completedTimestamp: "2026-08-09T07:30:44Z" name: Setup Pip Cache startedTimestamp: "2026-08-09T07:30:41Z" status: Succeeded - completedTimestamp: "2026-08-09T07:30:46Z" name: Process Config Templates startedTimestamp: "2026-08-09T07:30:45Z" status: Succeeded - completedTimestamp: "2026-08-09T07:30:46Z" name: Update Asset Management Version startedTimestamp: "2026-08-09T07:30:46Z" status: Succeeded - completedTimestamp: "2026-08-09T07:30:49Z" name: Check Registry startedTimestamp: "2026-08-09T07:30:46Z" status: Succeeded - completedTimestamp: "2026-08-09T07:34:56Z" name: Build Container Build startedTimestamp: "2026-08-09T07:30:50Z" status: Succeeded - completedTimestamp: "2026-08-09T07:35:06Z" name: Promote Changelog startedTimestamp: "2026-08-09T07:34:56Z" status: Succeeded - completedTimestamp: "2026-08-09T07:35:10Z" name: Promote Helm Release startedTimestamp: "2026-08-09T07:35:06Z" status: Succeeded - completedTimestamp: "2026-08-09T07:36:41Z" name: Promote Jx Promote startedTimestamp: "2026-08-09T07:35:11Z" status: Succeeded - completedTimestamp: "2026-08-09T07:37:32Z" name: Publish Org Kb startedTimestamp: "2026-08-09T07:36:42Z" status: Succeeded - kind: Promote promote: environment: staging pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/5304 startedTimestamp: "2026-08-09T07:36:06Z" status: Succeeded startedTimestamp: "2026-08-09T07:36:06Z" status: Succeeded - kind: Promote promote: environment: production pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/5305 startedTimestamp: "2026-08-09T07:36:38Z" status: Succeeded startedTimestamp: "2026-08-09T07:36:38Z" status: Succeeded version: 6.93.0 status: {}