Conversation
## Summary Briefly explain the purpose of this PR and the problem it solves. ## Changes - What was changed and why - Any notable design decisions or trade-offs ## Type of change - [ ] Bug fix - [ ] Feature - [ ] Refactor - [ ] Documentation - [ ] Chore/CI ## Affected areas - [ ] Core (Go) - [ ] Transports (HTTP) - [ ] Providers/Integrations - [ ] Plugins - [ ] UI (React) - [ ] Docs ## How to test Describe the steps to validate this change. Include commands and expected outcomes. ```sh # Core/Transports go version go test ./... # UI cd ui pnpm i || npm i pnpm test || npm test pnpm build || npm run build ``` If adding new configs or environment variables, document them here. ## Screenshots/Recordings If UI changes, add before/after screenshots or short clips. ## Breaking changes - [ ] Yes - [ ] No If yes, describe impact and migration instructions. ## Related issues Link related issues and discussions. Example: Closes #123 ## Security considerations Note any security implications (auth, secrets, PII, sandboxing, etc.). ## Checklist - [ ] I read `docs/contributing/README.md` and followed the guidelines - [ ] I added/updated tests where appropriate - [ ] I updated documentation where needed - [ ] I verified builds succeed (Go and UI) - [ ] I verified the CI pipeline passes locally if applicable
## Summary The `go.work` file is gitignored and must be regenerated in CI environments. Without it, builds in `cost-accuracy-test.sh` and `load-test.sh` resolve `core`, `framework`, and `plugins` from the published versions pinned in `transports/go.mod` rather than the local workspace copies. This PR ensures the Go workspace is initialized before any build steps run in those scripts. ## Changes - Added a call to `setup-go-workspace.sh` at the start of both `cost-accuracy-test.sh` and `load-test.sh`, executed from the repo root so that the relative `go work use ./core` paths resolve correctly and the resulting `go.work` file is auto-discovered by subsequent `go build` invocations. ## Type of change - [ ] Bug fix - [ ] Feature - [ ] Refactor - [ ] Documentation - [x] Chore/CI ## Affected areas - [ ] Core (Go) - [ ] Transports (HTTP) - [ ] Providers/Integrations - [ ] Plugins - [ ] UI (React) - [ ] Docs ## How to test Trigger the cost-accuracy and load-test CI workflows and confirm that the builds resolve local module versions rather than the published ones pinned in `transports/go.mod`. ```sh # Manually verify workspace setup cd <repo-root> source .github/workflows/scripts/setup-go-workspace.sh go build ./transports/... ``` ## Breaking changes - [ ] Yes - [x] No ## Related issues ## Security considerations None. ## Checklist - [ ] I read `docs/contributing/README.md` and followed the guidelines - [ ] I added/updated tests where appropriate - [ ] I updated documentation where needed - [ ] I verified builds succeed (Go and UI) - [ ] I verified the CI pipeline passes locally if applicable
## Summary
Adds the changelog for Bifrost Enterprise v1.4.13 (2026-06-21) and registers it in the docs navigation.
## Changes
- Added `docs/changelogs/ent-v1.4.13.mdx` documenting all features, bug fixes, and plugin dependency versions for the v1.4.13 release, built on `transports/v1.5.16`.
- Registered the new changelog page in `docs/docs.json` so it appears at the top of the Enterprise changelogs section.
Key highlights documented in the release:
- Business-unit and user attribution fields (`business_unit_id`, `business_unit_name`, `user_id`, `user_name`) added to BigQuery and Datadog plugins for cost/usage attribution.
- Durable, resumable background job runner for SCIM provisioning across all supported IdPs, with a `GET /api/scim/provision/jobs/{operation_id}` status endpoint.
- Datadog session-grouped traces via `group_traces_by_session`, pinning requests sharing an `x-bf-session-id` to a single APM trace.
- Cluster node `region` exposed via the cluster API and rendered in the UI.
- New `(Logs, Update)` RBAC permission with an accompanying migration for existing installs.
- Inline `409 Conflict` name-collision errors across access profiles, API keys, MCP tool groups, prompt deployments, roles, business units, and teams.
- Auto-assignment of access profiles to existing role members during config-file reconciliation.
- Group search input and selection indicators in the provisioning sync sheet.
- Fixed ghost-node double-counting on access-profile reloads.
- Fixed `409` vs `500` on duplicate-name violations across multiple resource endpoints.
- Fixed Okta provisioning deduplication, `Retry-After` handling, and multi-header `Link` parsing.
- Fixed `ListModels` spuriously enforcing provider/model allowlists when no virtual key is present.
## Type of change
- [ ] Bug fix
- [ ] Feature
- [ ] Refactor
- [x] Documentation
- [ ] Chore/CI
## Affected areas
- [ ] Core (Go)
- [ ] Transports (HTTP)
- [ ] Providers/Integrations
- [ ] Plugins
- [ ] UI (React)
- [x] Docs
## How to test
Navigate to the Enterprise changelogs section of the docs site and confirm the v1.4.13 entry appears at the top of the list and renders correctly, including the warning callout, feature/fix sections, and dependency block.
## Screenshots/Recordings
N/A — documentation-only change.
## Breaking changes
- [ ] Yes
- [x] No
## Related issues
N/A
## Security considerations
None. This is a documentation-only change.
## Checklist
- [x] I read `docs/contributing/README.md` and followed the guidelines
- [x] I added/updated tests where appropriate
- [x] I updated documentation where needed
- [x] I verified builds succeed (Go and UI)
- [ ] I verified the CI pipeline passes locally if applicable
|
Warning Review limit reached
More reviews will be available in 15 minutes and 4 seconds. Learn how PR review limits work. To continue reviewing without waiting, enable usage-based billing in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
|
Confidence Score: 3/5The Go handler and test file changes both need fixes before merging: the test file cannot compile as written, and the handler logic silently bypasses provider filtering for VKs that rely on the database default for IsActive. Two concrete defects in the changed Go files: new(true) / new(false) are not valid Go expressions and will prevent the test package from building; and the nil-IsActive guard causes active VKs (those with a NULL DB value) to skip provider filtering on list-models, producing a wider model list than the VK configuration allows. The docs and CI script changes are clean. transports/bifrost-http/handlers/list_models_vk.go and its test file need attention — the nil handling logic and the pointer-literal syntax both require correction. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[GET /v1/models request] --> B{VK header present?}
B -- No --> C[Allow all providers]
B -- Yes --> D{ConfigStore available?}
D -- No --> E[503 Service Unavailable]
D -- Yes --> F[GetVirtualKeyByValue]
F --> G{Error?}
G -- ErrNotFound --> C
G -- Other error --> H[500 Internal Server Error]
G -- nil --> I{vk == nil?}
I -- Yes --> C
I -- No --> J{vk.IsActive == nil?}
J -- Yes --> C
J -- No --> K{*vk.IsActive == false?}
K -- Yes --> C
K -- No --> L[Set BifrostContextKeyAvailableProviders]
L --> M[Filtered model listing]
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[GET /v1/models request] --> B{VK header present?}
B -- No --> C[Allow all providers]
B -- Yes --> D{ConfigStore available?}
D -- No --> E[503 Service Unavailable]
D -- Yes --> F[GetVirtualKeyByValue]
F --> G{Error?}
G -- ErrNotFound --> C
G -- Other error --> H[500 Internal Server Error]
G -- nil --> I{vk == nil?}
I -- Yes --> C
I -- No --> J{vk.IsActive == nil?}
J -- Yes --> C
J -- No --> K{*vk.IsActive == false?}
K -- Yes --> C
K -- No --> L[Set BifrostContextKeyAvailableProviders]
L --> M[Filtered model listing]
|
No description provided.