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: f7afde5a15ebd7bcdf9187ee6af3933a creationTimestamp: "2026-05-25T18:41:51Z" generation: 7 labels: branch: main build: "103" context: release created-by-lighthouse: "true" event-GUID: 6078b5bc-5869-11f1-93bb-96948b20d88e lighthouse.jenkins-x.io/baseSHA: a4f708e2962fe3786eb24c7ac73aff6bf7aa1009 lighthouse.jenkins-x.io/branch: main lighthouse.jenkins-x.io/buildNum: "1779734511326" lighthouse.jenkins-x.io/context: release lighthouse.jenkins-x.io/id: apitaltrade-bifrost-main-release-5kxcl lighthouse.jenkins-x.io/job: release lighthouse.jenkins-x.io/lastCommitSHA: a4f708e2962fe3786eb24c7ac73aff6bf7aa1009 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-npsqd-from-build-pack-pod provider: github repository: bifrost tekton.dev/pipeline: apitaltrade-bifrost-main-release-npsqd 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-25T18:45:42Z" - apiVersion: jenkins.io/v1 fieldsType: FieldsV1 fieldsV1: f:spec: f:completedTimestamp: {} f:status: {} manager: jx-promote-0.6.31 operation: Update time: "2026-05-25T18:46:32Z" - 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:context: {} f:gitBranch: {} f:gitOwner: {} f:gitRepository: {} f:gitUrl: {} f:message: {} f:pipeline: {} f:startedTimestamp: {} f:steps: {} manager: jx-build-controller operation: Update time: "2026-05-25T18:46:43Z" name: greencapitaltrade-bifrost-main-103 namespace: jx resourceVersion: "49588239" uid: 080bf174-adf3-4030-83de-b07d809af26c spec: baseSHA: a4f708e2962fe3786eb24c7ac73aff6bf7aa1009 batchPipelineActivity: {} build: "103" buildLogsUrl: s3://logs-gct-prod-20260425045301534100000007/jenkins-x/logs/greencapitaltrade/bifrost/main/103.log completedTimestamp: "2026-05-25T18:46:13Z" context: release gitBranch: main gitOwner: greencapitaltrade gitRepository: bifrost gitUrl: https://github.com/greencapitaltrade/bifrost.git lastCommitMessage: "feat(geofence): per-team library via nullable team_id on asset.iot.geofence\n\nOperator companies with multiple teams (e.g. one tenant running both an\nAralias fleet and a FEPL fleet) want each team to curate its own\ngeofence library without colliding on names. Today every zone is\ncompany-wide and the unique-name constraint applies across the whole\ntenant.\n\nModel changes:\n- Add nullable Many2one('asset.team') field `team_id` on\n asset.iot.geofence. NULL keeps the historical company-wide\n \ semantics; setting it scopes the zone to that team only.\n- Widen the existing _sql_constraints `name_company_uniq` from\n unique(name, company_id) to unique(name, company_id, team_id).\n Keeping the constraint name lets Odoo auto-migrate the index in\n place — renaming would leave the old narrower index behind.\n- Add a partial unique index in init() to preserve the prior\n \"no duplicate company-wide names per company\" invariant. SQL\n treats NULL != NULL, so the new triple-column unique alone wouldn't\n reject two zones with team_id NULL + same name; the partial index\n fills that gap.\n- New @api.constrains('team_id', 'company_id') guard blocks a Co A\n zone from linking to a Co B team — that would silently bridge\n \ tenants via the team relation, defeating record-rule isolation.\n\nTests (TDD, 9 assertions in test_geofence_team_scope.py):\n- team_id field shape (Many2one, optional)\n- company-wide zone creates with no team\n- team-scoped zone creates with team\n- same name allowed across different teams in same company\n- same name allowed company-wide + team-scoped (different scopes)\n- same name allowed across companies regardless of team\n- duplicate name within same (company, team) rejected\n- duplicate company-wide name in same company still rejected\n (the partial-index guard)\n- team_id from another company raises ValidationError\n\nPre-existing test noise on main (8 fail / 183 err of 290) is unrelated\n— same numbers with this branch checked out before/after, the diff\ngoes 8/183 → 7/175 (this PR's 9 new tests minus none of the existing\nones touched). Filed mentally as separate cleanup.\n\nFollowups (separate PRs):\n- Fury: expose team_id on AssetGeofence type, accept in GeofenceInput\n + GeofenceUpdateInput, filter geofenceAreas by current team\n- Flash: pass current team_id when listing / creating geofences\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.7 \n" lastCommitSHA: 69d6fa531616dac61e64baea26335eba298ccb6b message: 'Tasks Completed: 1 (Failed: 0, Cancelled 0), Skipped: 0' pipeline: greencapitaltrade/bifrost/main releaseNotesURL: https://github.com/greencapitaltrade/bifrost/releases/tag/v6.70.0 startedTimestamp: "2026-05-25T18:41:51Z" status: Succeeded steps: - kind: Stage stage: completedTimestamp: "2026-05-25T18:46:13Z" name: Release startedTimestamp: "2026-05-25T18:45:13Z" status: Succeeded - kind: Promote promote: environment: staging pullRequest: pullRequestURL: https://github.com/greencapitaltrade/mcu/pull/4001 startedTimestamp: "2026-05-25T18:46:13Z" status: Succeeded startedTimestamp: "2026-05-25T18:46:13Z" status: Succeeded - kind: Stage stage: completedTimestamp: "2026-05-25T18:46:35Z" name: from build pack startedTimestamp: "2026-05-25T18:42:10Z" status: Succeeded steps: - completedTimestamp: "2026-05-25T18:42:25Z" name: Git Clone startedTimestamp: "2026-05-25T18:42:10Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:28Z" name: Next Version startedTimestamp: "2026-05-25T18:42:25Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:31Z" name: Jx Variables startedTimestamp: "2026-05-25T18:42:28Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:31Z" name: Setup Npm Nexus startedTimestamp: "2026-05-25T18:42:31Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:34Z" name: Setup Pip Cache startedTimestamp: "2026-05-25T18:42:31Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:35Z" name: Process Config Templates startedTimestamp: "2026-05-25T18:42:34Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:35Z" name: Update Fleet Management Version startedTimestamp: "2026-05-25T18:42:35Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:37Z" name: Check Registry startedTimestamp: "2026-05-25T18:42:35Z" status: Succeeded - completedTimestamp: "2026-05-25T18:45:26Z" name: Build Container Build startedTimestamp: "2026-05-25T18:42:38Z" status: Succeeded - completedTimestamp: "2026-05-25T18:45:42Z" name: Promote Changelog startedTimestamp: "2026-05-25T18:45:27Z" status: Succeeded - completedTimestamp: "2026-05-25T18:45:45Z" name: Promote Helm Release startedTimestamp: "2026-05-25T18:45:42Z" status: Succeeded - completedTimestamp: "2026-05-25T18:46:35Z" name: Promote Jx Promote startedTimestamp: "2026-05-25T18:45:46Z" status: Succeeded - kind: Stage stage: completedTimestamp: "2026-05-25T18:46:35Z" name: from build pack startedTimestamp: "2026-05-25T18:42:10Z" status: Succeeded steps: - completedTimestamp: "2026-05-25T18:42:25Z" name: Git Clone startedTimestamp: "2026-05-25T18:42:10Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:28Z" name: Next Version startedTimestamp: "2026-05-25T18:42:25Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:31Z" name: Jx Variables startedTimestamp: "2026-05-25T18:42:28Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:31Z" name: Setup Npm Nexus startedTimestamp: "2026-05-25T18:42:31Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:34Z" name: Setup Pip Cache startedTimestamp: "2026-05-25T18:42:31Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:35Z" name: Process Config Templates startedTimestamp: "2026-05-25T18:42:34Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:35Z" name: Update Fleet Management Version startedTimestamp: "2026-05-25T18:42:35Z" status: Succeeded - completedTimestamp: "2026-05-25T18:42:37Z" name: Check Registry startedTimestamp: "2026-05-25T18:42:35Z" status: Succeeded - completedTimestamp: "2026-05-25T18:45:26Z" name: Build Container Build startedTimestamp: "2026-05-25T18:42:38Z" status: Succeeded - completedTimestamp: "2026-05-25T18:45:42Z" name: Promote Changelog startedTimestamp: "2026-05-25T18:45:27Z" status: Succeeded - completedTimestamp: "2026-05-25T18:45:45Z" name: Promote Helm Release startedTimestamp: "2026-05-25T18:45:42Z" status: Succeeded - completedTimestamp: "2026-05-25T18:46:35Z" name: Promote Jx Promote startedTimestamp: "2026-05-25T18:45:46Z" status: Succeeded version: 6.70.0 status: {}