mirror of
https://github.com/coder/coder.git
synced 2026-10-16 14:48:56 +08:00
6dd2e95692e2af3edf899af8c7a47e4f37c46071
16621
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6dd2e95692 |
docs: describe organization roles and correct the roles permission claims (#29303)
## Summary The roles reference documented deployment-wide roles only. Organization-scoped roles were named in passing on three other pages but defined nowhere, and two statements on the page contradicted the RBAC code. Closes [DOCS-891](https://linear.app/codercom/issue/DOCS-891/organization-scoped-roles-are-defined-only-in-code-not-in-the-docs) ## Problem `coderd/rbac/roles.go` and `coderd/rbac/rolestore/rolestore.go` define eight organization-scoped roles. `docs/` defined none of them. Searching `docs/` for `organization-auditor`, `organization-user-admin`, `organization-service-account`, and `organization-workspace-creation-ban` returns nothing, and `organization-admin` appears only inside an IdP sync JSON example. That produced three concrete defects: - **Dead-end cross-reference.** The AI Gateway group budget prerequisite named the Organization Admin and Organization User Admin roles and linked to a page that defines neither. - **Incorrect Member claim.** The page said all users hold an implicit Member role "that may use personal workspaces." The site `member` role grants no workspace permissions, and `OrgMemberPermissions` grants none either. Workspace access comes from `organization-workspace-access`, which organizations attach through their default member roles. - **Unqualified Owner row.** The table asserts Owner can execute and use all workspaces. `CODER_DISABLE_OWNER_WORKSPACE_ACCESS` removes SSH and application access from the role, and the flag was documented only in the generated CLI and configuration references. ## Fix Adds an Organization roles section to the roles page covering the six assignable organization roles, where to assign them, and the implicit membership role the dashboard doesn't display. It also records that Organization Admin excludes SSH, application, and terminal access to other members' workspaces, which is the least discoverable part of the model. Corrects the Member and Owner statements, retargets the group budget prerequisite at the new section, notes that the Disabled workspace sharing policy overrides the sharing permission of any role an organization member holds, and fixes the built-in roles and custom roles glossary entries. The deployment roles table is deliberately untouched. [ENG-873](https://linear.app/codercom/issue/ENG-873/autogenerate-roles-documentation) replaces it with a generated table, so correcting the Auditor row or adding an organization matrix by hand now would be churn. The new section is prose a generator won't emit, so the two changes compose. <details> <summary>Verification and scope notes</summary> **Claims verified against source, not assumed:** | Claim | Source | |---|---| | Six assignable organization roles and their display names | `builtInRoles` in `coderd/rbac/roles.go` | | Organization Admin lacks `ssh` and `application_connect` | `orgAdmin` role, `slice.Omit(ResourceWorkspace.AvailableActions(), ...)` | | Member role grants no workspace permissions | `memberRole.User` excludes `ResourceWorkspace` with no add-back | | Workspace access comes from the default member roles | `DefaultOrgMemberRoles()` and `orgWorkspaceAccessMemberPerms()` | | `organization-member` and `organization-service-account` have no display name, so the dashboard never shows them | `systemRoles` in `rolestore.go`, `DisplayName: ""` | | Disabled sharing overrides other roles | org-level negative `workspace:share` permission in `OrgMemberPermissions` | | Roles are assigned on the organization Members page | `Edit roles` action in `OrganizationMembersTable.tsx` | | Flag, environment variable, and YAML names | `codersdk/deployment.go` | **Scoped out deliberately:** - The Disabled-sharing note says "any role held by a member of that organization" rather than naming Owner. The negation rides on the organization membership role, so it doesn't reach an Owner who isn't a member of that organization. - Pre-existing gerund headings on the touched pages (`Creating custom roles`, `Getting Started`, `Sharing your Workspace`, `Using a shared workspace`, `Accessing workspace apps in shared workspaces`) are left alone to keep the diff scoped. Vale reports them as warnings on `main` today. - `## Custom Roles` is retitled to sentence case. The GitHub anchor slug is unchanged, so inbound links still resolve. **Checks run:** `make fmt/markdown`, `make lint/markdown`, `make lint/emdash`, and `vale` on the four changed files. Vale reports zero findings from the new text. Every link added or changed was resolved to its file and heading anchor. **Also worth knowing:** three en dashes in the workspace sharing policy list are replaced with colons. `scripts/check_emdash.sh` only scans changed files, so they survived on `main` and would have failed this PR's CI once the surrounding lines were touched. </details> --- Opened by Coder Agents on behalf of @nickvigilante. |
||
|
|
25a6bf56c9 |
docs: state what the style guide tooling actually checks (#29298)
## Summary The style guide documents 77 rules. Tooling checks 8 of them, one of which doesn't run on published pages, and Vale runs advisory so no finding fails a build. Nothing said so, and several annotations said the opposite. This corrects the false claims and states the coverage where authors and agents actually read. ### The false claims Nine annotations read as active enforcement with no `(planned)` marker: - `Google.Gender`, `Google.GenderBias`, `Google.Headings`, `Google.HeadingPunctuation`, `Google.OxfordComma`, `Google.Quotes`, `Google.Exclamation`, `Google.Ranges`. The repo-root `.vale.ini` sets `BasedOnStyles = Coder`, and the doctrine in `docs/.style/README.md` deliberately excludes third-party rules. - `Coder.FirstPersonSingular` and `Coder.FirstPersonPlural`. No YAML exists for either in the rule package. All are now marked planned, matching the 17 annotations that already were. ### What changed | File | Change | |---|---| | `docs/.style/style-guide/README.md` | New "What the tooling checks, and what it doesn't" section: per-rule table with tool, severity, and scope, per-section coverage counts, and the enumeration and classification rules that reproduce them | | `docs/.style/style-guide/capitalization-and-punctuation.md`, `voice-and-tone.md`, `accessibility-and-inclusion.md` | Mark the 9 false enforcement claims planned | | `docs/.style/style-guide/audience-and-scope.md` | Give each rule its own enforcement footer, so the page's 6 rules stop counting as 1 | | `docs/.style/style-guide/word-choice.md` | Say that `Coder.BrandNames` covers `HashiCorp` casing only, and give the What's next? sub-rule its own footer | | `docs/about/contributing/documentation.md` | Drop "to enforce prose style"; state that Vale covers a subset and a clean run isn't conformance | | `AGENTS.md`, `.claude/docs/DOCS_STYLE_GUIDE.md`, `.claude/skills/write-docs/SKILL.md` | Same statement for agents; split the skill checklist item so applying the guide and passing linters are separate gates | ## Why An agent (me) wrote a new install page, ran `make lint/prose` and markdownlint clean, and shipped a draft that violated one-sentence-per-line, the "refer to" rule, `sh` fence tags, H3 tab headings, and the Learn more heading. None of those are enforced. The single checklist item that bundled "style guide applied with it open" with "Vale passes" made the substitution easy to miss. <details> <summary>Verification and method</summary> ### Empirical probe A scratch file violating 12 documented rules (gerund heading, trailing heading punctuation, first person singular and plural, `Click`, `Github`, `Hashicorp`, `VSCode`, Oxford comma, US quotation, numeric range, exclamation point, one-sentence-per-line, `Simply`, navigational `See`, `Next steps`) produced exactly 3 findings: `Coder.GerundHeading`, `Coder.SelectClick`, `Coder.BrandNames`. ### Counts One rule section is one heading with an enforcement footer (`*Enforced by ...*`, `*Documentation-only ...*`, `*Adapted from ASD-STE100 ...*`). Sections are classified against `.vale.ini` and `docs/.style/styles/Coder/` by an ordered test: a stated **Documentation-only** wins, then a check that runs today, then planned. 77 total: 8 tool-checked, 25 planned, 44 documentation-only. PR 2 in this stack adds a script that reconciles those three sources in CI so the table and the annotations can't drift from the config again. ### Two findings recorded but not fixed here - `Coder.BrandNames` ships at `error` but swaps only `Hashicorp` and `HASHICORP`, though the table it's cited under lists 8 brands. `Github` and `VSCode` pass clean. The footer now says so; widening the rule is tracked in DOCS-889. - `Coder.OneSentencePerLine` is set to `NO` repo-wide and re-enabled only for `docs/.style/*.md` and `docs/.style/styles/Coder/*.md`. Rollout tracked in DOCS-888. ### Note for the reviewer `make lint/prose` over `docs/` currently reports a backlog of `Coder.GerundHeading` warnings, plus the intentional `Coder.Demo*` findings in the annotation demo. That backlog is the advisory channel working as designed and is out of scope here, but it's the concrete evidence behind the new sentence about findings accumulating rather than blocking. Worth a separate cleanup decision: fix the headings, or re-scope the rule. </details> --- Linear: [DOCS-887](https://linear.app/codercom/issue/DOCS-887/make-clear-that-vale-passing-is-not-style-guide-conformance) PR 2 of this stack adds the CI guard that keeps these claims true. 🤖 Generated with Coder Agents on behalf of @nickvigilante. |
||
|
|
b9e3de8403 |
fix: make redirect_uris the source of truth for OAuth2 redirect URIs (#29440)
Fix OAuth2 callback edits retaining stale redirect URIs - Make `redirect_uris` the sole source of truth, with the first entry as primary and `callback_url` retained as a synchronized, deprecated copy. - Backfill existing apps and unify all writers. Callback-only admin updates now replace the previous primary while preserving alternate URIs. - Share redirect URI validation, reject fragments, and add limits of 32 URIs and 2048 bytes per URI. - Add regression coverage for migration, callback edits, validation, and rejection of removed URIs during authorization and token exchange. One data migration; no schema or request/response shape changes. Admin API and UI list editing follow separately. Rollout: Drain old replicas before upgrading; callback edits handled by old code are not reflected on new replicas. Refs PLAT-619. |
||
|
|
056c3e4f55 |
ci(.github): collect Windows PostgreSQL diagnostics (#29362)
Add bounded Windows PostgreSQL listener, connection, process, memory and disk diagnostics alongside the existing server logs. Retain timestamped samples and sanitized failures as an artifact on unsuccessful runs. This gathers evidence for PLAT-307 without claiming its cause or a fix. A concrete runner preserves make's exit status and the caller's module-path environment, and cleans up only its owned sampler. Windows concurrency remains 8 packages and 16 tests per package; the sampler's 500 ms connection deadline, PostgreSQL settings, retries and production telemetry are unchanged. Focused checks cover a strict native Windows sample, connection and memory boundaries, sampling limits, cleanup, make exits and environment preservation. Full local pre-commit, action validation and focused checks pass, including LF and CRLF harness copies. Current-head Windows native smoke, reduced harness and Go tests pass. All applicable CI checks pass, including the required check. Related: [PLAT-307](https://linear.app/codercom/issue/PLAT-307/flake-testtelemetry-multiple-variants-postgres-connection-refused). <details> <summary>Implementation approach</summary> Run an isolated, bounded sampler around make. Select diagnostic fields without credentials, command lines or raw error messages. Validate a completed native sample before Go tests, including cached runs, and keep that sample in the failure-artifact directory. </details> Generated with Coder Agents. |
||
|
|
926e4afc39 | fix(coderd/aibridged): ignore empty response body writes (#29728) | ||
|
|
17abc3f093 |
fix(site/src/components/TableToolbar): keep toolbar text at 12px (#29738)
The workspace table toolbar count changed typography when bulk actions replaced pagination. Keep the shared toolbar text at the 12px typography token in both states. Refs DES-22114 Before https://github.com/user-attachments/assets/63b80503-bd9f-4c5b-92c1-a3c4a8351d5b After https://github.com/user-attachments/assets/b201ece2-e20f-4cf1-9e60-7ce1863fb5b0 _Generated by Coder Agents on behalf of @jeremyruppel._ |
||
|
|
6869e4b95a |
feat(site): show exact day counts for last login on UsersPage (#29688)
ref CLIENT-192 Make `LastSeen` display an exact number of days on `UsersPage` only. see Status column on the right of these screenshots: before|after ---|--- <img width="1840" height="1191" alt="image" src="https://github.com/user-attachments/assets/c125ae05-cf05-4ad7-aa74-c44b575f2d69" />|<img width="1796" height="1147" alt="image" src="https://github.com/user-attachments/assets/d73eaa2d-634c-4ab6-9d74-1027309bd79d" /> |
||
|
|
ae76be47d3 |
fix: prevent tailnet coordination panics (#29300)
Malformed coordinate requests can panic per-connection coordinator goroutines and terminate coderd. Disconnect requests and nested cleanup of peers with full response buffers can also attempt to send on or close an already-closed channel. Validate request structure before authorization or state mutation in both tailnet coordinators, stop processing after disconnect, and avoid removing a peer twice during nested cleanup. Unexpected per-connection panics close the affected connection through the existing lost-peer cleanup. https://linear.app/codercom/issue/PLAT-595/security-nil-node-in-tailnet-updateself-crashes-entire-coderd-process |
||
|
|
c1286707bf |
ci(.github/workflows): bump agents-chat-action to v0.5.1 for the /api/v2 fix (#29732)
## Summary Bump the pinned `coder/agents-chat-action` SHA so doc-check actually runs the `/api/v2` fix. [coder/coder#29548](https://github.com/coder/coder/pull/29548) removed the `/api/experimental` chat mounts, and the action still called them. [coder/agents-chat-action#43](https://github.com/coder/agents-chat-action/pull/43) repointed the client at `/api/v2` and is merged, but this workflow pins the action by commit SHA, so doc-check kept running the broken v0.5.0 bundle. ## Changes - `.github/workflows/doc-check.yaml`: `coder/agents-chat-action@3e20636` (v0.5.0) to `@9b3ac42` (v0.5.1). `v0.5.1` is a new tag cut at the post-merge commit of coder/agents-chat-action#43. The pin is the commit SHA, matching the existing convention for every pinned action in this workflow. ## Evidence Of the eight most recent `doc-check.yaml` runs, seven failed with the stale action: ``` Failed to look up chats by reuse labels [...]: Coder API error: Not Found ``` ## This does not fix every doc-check failure The eighth recent failure has a different cause and survives this change: ``` doc-check-pr-29440 is dormant since 2026-09-18T20:25:12Z. The review cannot run, because a chat cannot start its own dormant workspace ``` That is the `Check the review workspace is usable` step failing per [CODAGT-1025](https://linear.app/codercom/issue/CODAGT-1025), which is deliberate: the step fails loudly rather than letting a review silently read nothing. Individual pull requests whose review workspace has gone dormant will keep going red until CODAGT-1025 is addressed. ## Testing - `make lint/actions/actionlint`: pass (via pre-commit). - Full `pre-commit-light` suite: pass. - Verified `v0.5.1` dereferences to commit `9b3ac42d568e9206f9cd51a97789820d6935cc8d`, which is the SHA pinned here. End-to-end verification needs this merged, since the workflow runs the pinned SHA from the base branch. <details> <summary>Investigation notes</summary> ### Why the earlier fix did not take effect The action fix merged at 14:39 UTC, but GitHub Actions resolves `uses:` against the pinned SHA, not the default branch. Nothing in coder/coder changed when the action merged, so every subsequent run still executed the v0.5.0 bundle. ### Failure classification, eight most recent runs | Run | Failing step | Cause | | --- | --- | --- | | 35742517848 | Check the review workspace is usable | CODAGT-1025, dormant workspace | | 35741492350 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | | 35741372081 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | | 35741334633 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | | 35741253070 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | | 35740876746 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | | 35740802233 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | | 35740674362 | Run doc-check via Coder Agent Chat | stale pin, reuse label 404 | ### Note on the floating tag The repository also carries a `v0` tag, but it still points at `v0.1.0` and is unmaintained. This workflow pins exact SHAs, so that tag is not used here and was left alone. </details> Refs [DOCS-987](https://linear.app/codercom/issue/DOCS-987/bump-the-pinned-agents-chat-action-sha-in-doc-checkyaml-to-pick-up-the). > [!NOTE] > Coder Agents generated this pull request on Nick Vigilante's behalf. |
||
|
|
c2f2c1708e |
feat: route and link the User spend page for its viewers (#28964)
Routes `/ai/settings/spend` to the spend page and opens it to its
viewers: a **User spend** entry in the AI settings sidebar, the **AI**
entry in the Admin settings menu, and the AI settings index redirect all
admit anyone who can read some organization's group members
(`canViewAISpend`, the same `group_member:read` check the endpoint
applies), so Owners, Auditors, Template Admins, User Admins, and
organization admins reach it the way organization MCP sharers already
do. Documents the page in the AI Gateway cost controls and spend
management guides.
## Why
This is the PR that makes the feature reachable; the spend page remains
unreachable until this merges. It also carries the head branch and
delivery record of the original single PR.
## What to scrutinize
- `canViewAISpend` is a pure entitlement-and-organization predicate.
Each of its three callers owns its query and loading/error behavior. The
Navbar and index redirect skip that query for viewers with site-wide AI
settings permissions. This repeats the short query wiring rather than
introducing a shared hook.
- `AISettingsSidebarView` keeps User spend as a direct navigation entry.
- The index redirect checks spend access last, after every existing
destination.
## Rework note
Rewritten in place on 2026-09-20 as the ninth layer of a nine-PR stack;
the head branch name predates the split. The original description and
the UAT delivery record through round 13 (PASS on
`e830cbf9937d17a0693909bd027cc142393ceef3`) are preserved in the first
comment below. That verdict applies to the pre-split head, not to this
rewritten commit.
## Validation
`pnpm test src/modules/management/AISettingsSidebar.test.tsx
src/modules/dashboard/DashboardLayout.test.tsx
src/pages/AISettingsPage/AISettingsIndexRedirect.test.tsx`, Storybook
`AISettingsSidebarView` (`SpendVisible`, `UserSpendActive`), repository
pre-commit (includes markdown lint for the docs).
## Delivery record
Composed head `d899228f798` passed format, check, full frontend lint,
125 targeted unit tests, and 86 story tests. Every layer passed
integration checks and the commit hooks. Pre-push hooks were skipped as
requested.
The eight-role frontend audit covered `2cb8fb35b12..1adb58ecbd6`.
Findings were fixed before publication: the picker stays mounted after
the initial retention load; its skeleton uses utility classes; vacuous
test loops and the unnecessary predicate comment were removed; and the
entitlement fixture was simplified. RO3 query-wiring duplication is
intentionally retained to keep the access check a pure function, as
requested.
| Audit role | Task | Disposition |
|---|---|---|
| Simplicity and frontend contract | `fff065b7b7` | No findings |
| Reuse | `30b7fde9ac` | RO3 nit accepted above |
| Accessibility | `3bfd41ce80` | SA1 and SA6 fixed |
| Comments | `4eacb22ea8` | CD2, CD3, CD5 fixed |
| Tests | `1b03411670` | Test coverage corrected; literal-model API
regressions pass |
| Types | `7ef176f55d` | Fixture cleanup and picker regression fixes
integrated |
| React | `4d259f8821` | No findings |
| Data flow | `2a897df255` | No findings |
The follow-up fixes were validated by the implementing agents and the
composed-tip checks, not a new independent review of this exact head. No
further Codex or human re-review was requested because the review budget
is exhausted. Live UAT has not been rerun on this head; round 14
exercised `926d489db6c` and remained BLOCKED on the spend-only
entitlement cycle. Round 15 was halted after shared-deployment contact.
No UAT pass is claimed for the current stack.
## Stack context
PR 9 of 9. The stack adds a **User spend** page under **Admin settings**
> **AI** > **User spend**: total and per-user AI Gateway spend for one
organization over a reporting period, read from `GET
/api/v2/organizations/{organization}/ai/spend/users` (#29129, merged).
It is #28964 split into one-concern PRs. Historical UAT covers earlier
heads only; live UAT has not been rerun after these review fixes. Bottom
to top: DateRangePicker limits, shared dimension badge, API client
method, spend table, page view, page container, reporting period,
dimension filters, route and navigation (#28964).
> Xum prepared this PR on behalf of @ibetitsmike.
|
||
|
|
4f78bb8535 |
feat(site/src): filter spend by provider, model, and client (#29632)
Wires the provider, model, and client filter menus shared with the sessions page into the spend page, in the same order as the table columns. Their options come from deployment-wide AI Gateway endpoints, so only viewers with `viewAnyAIBridgeInterception` get the menus; for anyone else the URL parameters are ignored and no option request is made. ## Why Organization-scoped filter options need a new endpoint and are a follow-up; gating on the deployment-wide permission keeps the page open to organization readers without leaking filter options they cannot list. ## What to scrutinize - `shows spend without dimension filters to viewers who cannot read AI sessions` asserts no provider, model, or client request and no `provider_name` in the report request. - The pending-report test drives the offered presets and checks their request boundaries against the retained cutoff. The keyboard test applies a second range after the first request without moving focus back to the trigger. - The shared model menu sends raw identifiers through `model`, introduced in #29627. Quoting and SQL LIKE escaping no longer live in the frontend. ## Validation `pnpm test src/pages/AISettingsPage/SpendPage/SpendPage.test.tsx src/pages/AIBridgePage/filters/ModelFilter.test.tsx`, `pnpm test:storybook` on `SpendPage.stories.tsx` (`ProviderMenu`, `FilteredByProvider`), repository pre-commit. ## Delivery record Published head `ece31d4795d` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 8 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
d532b40ed0 |
feat(site/src): map the spend reporting period to selectable days within retention (#29631)
Without URL dates the server applies the current budget period narrowed to retention; this PR maps that echoed window (`period_start`, `period_end`, `retention_start`) onto local picker days so the picker shows the applied range, bounds it below by the first whole day within retention, and stays off when less than a day of retention leaves nothing selectable. Exports `toBoundary` from the picker for that mapping and adds the page's stories. ## Why Usage before the retention cutoff has been purged, so the picker must not offer those days or presets; the cutoff moves, so it is read from each real report rather than computed client side. Because retention is deployment-wide, the page keeps the last reported cutoff while a new report loads. Only the initial load replaces the picker with a skeleton, preserving keyboard focus on later requests. ## What to scrutinize - `appliedWindowToDateRange` returns undefined when the first selectable day is after today; `SpendPage.period.test.ts` covers UTC/local day mapping, a clamped start, and sub-day retention, and pins a positive-offset zone so it cannot pass vacuously on UTC hosts. - `SpendPage.stories.tsx` is new in this split at this layer; the 12-user fixture is generated with `Array.from` (same values as #28964's hand-written list). ## Validation `pnpm test src/pages/AISettingsPage/SpendPage/SpendPage.period.test.ts src/pages/AISettingsPage/SpendPage/SpendPage.test.tsx`, `pnpm test:storybook` on `SpendPage.stories.tsx`, repository pre-commit. ## Delivery record Published head `78d974d61f1` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 7 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
ed69bad4ff |
feat(site/src): add the organization spend page (#29630)
Adds the `SpendPage` container: it lists the organizations whose group members the viewer can read, selects one from the `org` search parameter (falling back to the default, then the first) and refuses to show another organization's spend when the requested one is denied, forwards `startDate`/`endDate` from the URL as the reporting period, and reads the report through a paginated query. `paginatedOrganizationAISpend` keeps previous rows only across page changes, never across organizations or filters, which needs `usePaginatedQuery` to accept a `placeholderData` override. ## Why Organization scoping, denied-organization handling, and cache isolation across organizations belong with the first usable report. The retention-aware period mapping and the dimension filters follow in the next two PRs; until then the container passes `minDate` and `filterMenus` as undefined, which the view already supports. ## What to scrutinize - `placeholderData` in `api/queries/aiBridge.ts` compares the hashed scope key (organization plus filter) of the previous query; `keeps the loaded rows while paging but not across organizations` pins it. - Changing organization or period clears `page`. ## Validation `pnpm test src/pages/AISettingsPage/SpendPage/SpendPage.test.tsx`, repository pre-commit. ## Delivery record Published head `b732429b75b` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 6 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
e101ceb4f5 |
feat(site/src/pages/AISettingsPage/SpendPage): compose the spend page view (#29629)
Adds `SpendPageView`, the presentational page: paywall and not-enabled states, the organizations loading, error, and empty states, a warning when the requested organization is unavailable, and the filters row (`SpendFilters`: organization picker hidden with a single organization, optional provider, model, and client menus, and the date range picker or a non-interactive **Current budget period** label when no explicit range is applied). ## Why Keeping the view stateless lets its stories cover every page-level state without network mocks; the container PR above wires the data. ## What to scrutinize - `SpendFilters` passes `MaxAISpendPeriodDays` and `minDate` to the picker. This layer shows a skeleton while the report is loading; #29631 separates the initial retention-bound load from subsequent report loads so the picker stays mounted. The container decides when `dateRange` is undefined. - `SpendPageView.stories.tsx` holds only page-level states; table states moved to the table PR below. ## Validation `pnpm test:storybook` on `SpendPageView.stories.tsx`, repository pre-commit. ## Delivery record Published head `c462e135906` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 5 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
6d22b8a186 |
feat(site/src): add the spend by user table (#29628)
Adds `SpendUsersTable`: the period total, a paginated table of users with the providers, models, and clients each spent through and their cost, plus loading, empty, error, and refetch states. `SpendAmount` renders a cost with a compact warning icon (tooltip on hover and focus) when some usage had no price; `ModelsBadge` gives models the shared dimension badge; `InfoTooltip` takes an `ariaLabel` so the two warning icons have distinct names. ## Why The table is the page's main content and the largest piece; it lands with its own stories so the page PRs stay small. ## What to scrutinize - `SpendUsersTable.stories.tsx` is new in this split: the table-state stories that #28964 kept in `SpendPageView.stories.tsx` (loading, empty, errors, refreshing, unpriced tooltips, badge lists) now render the table directly. The view PR keeps only page-level states. - Column widths use a container query (`@container`) because beside the settings sidebar the table is far narrower than the viewport. ## Validation `pnpm test:storybook` on `SpendUsersTable.stories.tsx`, repository pre-commit. ## Delivery record Published head `137809400e0` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 4 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
80eee58d1d |
feat: add the organization AI spend client method and report fixture (#29627)
Adds `API.getOrganizationAISpendUsers(organizationId, params)` for `GET
/api/v2/organizations/{organization}/ai/spend/users` (period, provider,
model, client filters plus `limit`/`offset`), the
`MockOrganizationAISpendReport` fixture, and a shared
`codersdk.MaxAISpendPeriodDays` constant that the enterprise export
handler now reads and that `make gen` emits into `typesGenerated.ts`.
The model-list endpoint also accepts a literal `model` prefix. The
backend escapes SQL LIKE characters, while `q` keeps its existing search
syntax. Supplying both nonempty parameters returns 400. The filter menu
adopts this parameter in #29632.
## Why
The frontend caps custom ranges at the same 31-day limit the server
enforces; one SDK constant keeps the two from drifting. The fixture is
what every later test and story renders. Literal model identifiers
should not require search-language quoting or SQL escaping in the
frontend.
## What to scrutinize
- `enterprise/coderd/aibridge.go`: `maxAISpendExportPeriod` is now
derived from the SDK constant, same value as before.
- `MockOrganizationAISpendUser` is not exported yet; the table PR
exports it for its stories (knip fails on exports without a consumer).
## Generated files
`site/src/api/typesGenerated.ts`, `coderd/apidoc/docs.go`,
`coderd/apidoc/swagger.json`, and `docs/reference/api/aigateway.md` via
`make gen`.
## Validation
`pnpm test src/api/api.test.ts -t getOrganizationAISpendUsers` (new
case), `go test ./enterprise/coderd/ -run TestAIBridgeListModels
-count=1 -v`, repository pre-commit including `make gen` with no drift.
Model tests cover literal punctuation, prefix matching, existing `q`
behavior, and conflicting parameters.
## Delivery record
Published head `8d9a4faa0aa` passed per-layer integration checks and
commit hooks. The composed head `d899228f798` passed format, check, full
frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were
skipped as requested. See #28964 for audit findings, their disposition,
and historical UAT limits. No exact-head live UAT or new independent
re-review is claimed.
## Stack context
PR 3 of 9. The stack adds a **User spend** page under **Admin settings**
> **AI** > **User spend**: total and per-user AI Gateway spend for one
organization over a reporting period, read from `GET
/api/v2/organizations/{organization}/ai/spend/users` (#29129, merged).
It is #28964 split into one-concern PRs. Historical UAT covers earlier
heads only; live UAT has not been rerun after these review fixes. Bottom
to top: DateRangePicker limits, shared dimension badge, API client
method, spend table, page view, page container, reporting period,
dimension filters, route and navigation (#28964).
> Xum prepared this PR on behalf of @ibetitsmike.
|
||
|
|
f7b93d341b | fix(site): use a template literal in the OAuth2 app name fixture (#29729) | ||
|
|
f204307971 |
refactor(site/src/pages/AIBridgePage): share one dimension badge across providers and clients (#29626)
Moves the provider and client badges out of `ListSessionsRow` into `ProvidersBadge` and `ClientsBadge`, thin wrappers over one `ItemsBadge`: one item renders a labeled badge with its icon, several collapse into a count badge whose tooltip lists them. ## Why The spend table higher in this stack shows the providers, models, and clients each user spent through and must render them exactly like the sessions list. Extracting the badge first keeps that PR to the table. `ModelsBadge` arrives with the table, its first consumer. ## What to scrutinize - The count badge is now a real `button` (keyboard reachable, tooltip on focus) that stops click propagation so opening the list does not also open the clickable session row; `ListSessionsRow.test.tsx` pins that. - The single-item badge gains a `title` so a truncated label is still readable. ## Validation `pnpm test src/pages/AIBridgePage/ListSessionsPage/ListSessionsRow.test.tsx` (new), Storybook `ListSessionsRow` stories (count-badge tooltip added), repository pre-commit. ## Delivery record Published head `1f2b0af070f` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 2 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
4c84dca4f6 |
feat(site/src/components/DateRangePicker): add maxDays and minDate props (#29625)
Adds `maxDays` and `minDate` to `DateRangePicker`, and labels the trigger with the committed inclusive days rather than the exclusive API boundary. ## Why The spend page higher in this stack must cap a custom range at the endpoint's 31-day limit and hide days and presets that start before the retention cutoff the report echoes. The page shows a skeleton until the first retention bound arrives, then keeps the picker mounted during report reloads. The picker does not need a disabled prop. `toBoundary` stays private here; the reporting-period PR exports it when the page first needs it. ## What to scrutinize - `selectableDaysFrom`: when the maximal range of `maxDays` local days crosses a fall daylight-saving shift, the committed interval runs long by the shift, so the calendar allows one day less from that start instead of trimming the committed range. - `excludeDisabled` restarts a calendar selection if its previously committed start has fallen behind `minDate`. - The trigger label now shows `fromBoundary(value)`, so a midnight exclusive end displays the previous day. `TemplateInsightsPage` is the other caller and is affected by that label change. ## Validation `pnpm test src/components/DateRangePicker/DateRangePicker.test.tsx` (new: maxDays restart, DST shave, minDate), `pnpm test:storybook` on `DateRangePicker.stories.tsx` (new `ClosedExclusiveEnd` and `RetentionLimited`), repository pre-commit (biome, tsc, knip). ## Delivery record Published head `d1fc9334360` passed per-layer integration checks and commit hooks. The composed head `d899228f798` passed format, check, full frontend lint, 125 unit tests, and 86 story tests. Pre-push hooks were skipped as requested. See #28964 for audit findings, their disposition, and historical UAT limits. No exact-head live UAT or new independent re-review is claimed. ## Stack context PR 1 of 9. The stack adds a **User spend** page under **Admin settings** > **AI** > **User spend**: total and per-user AI Gateway spend for one organization over a reporting period, read from `GET /api/v2/organizations/{organization}/ai/spend/users` (#29129, merged). It is #28964 split into one-concern PRs. Historical UAT covers earlier heads only; live UAT has not been rerun after these review fixes. Bottom to top: DateRangePicker limits, shared dimension badge, API client method, spend table, page view, page container, reporting period, dimension filters, route and navigation (#28964). > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
956eafbb75 |
chore: bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.70.0 to 0.71.0 (#28835)
Bumps [go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp](https://github.com/open-telemetry/opentelemetry-go-contrib) from 0.70.0 to 0.71.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md">go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp's changelog</a>.</em></p> <blockquote> <h2>[1.46.0/2.5.3/0.71.0/0.37.3/0.26.0/0.20.1/0.16.3/0.18.0] - 2026-08-25</h2> <p>This release is the last to support [Go 1.25]. The next release will require at least [Go 1.26].</p> <h3>Added</h3> <ul> <li>Add support for the <code>aws.ec2</code> resource detector in <code>go.opentelemetry.io/contrib/otelconf/x</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9139">#9139</a>)</li> <li>Support testing of [Go 1.27]. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9524">#9524</a>)</li> <li>Add <code>go.opentelemetry.io/contrib/detectors/docker</code>, a resource detector for Docker, ported from <code>processor/resourcedetectionprocessor/internal/docker</code> in opentelemetry-collector-contrib. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9001">#9001</a>)</li> <li>Add <code>S3AttributeBuilder</code> to <code>go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws</code> that sets S3-specific span attributes following the OpenTelemetry S3 semantic conventions. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9292">#9292</a>)</li> </ul> <h3>Deprecated</h3> <ul> <li>Deprecate <code>go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho</code>. Use <code>github.com/labstack/echo-opentelemetry</code> instead. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9136">#9136</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Record <code>error.type</code> attribute on server spans in <code>go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful</code> when a request is cancelled or ends in a 5xx error. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9387">#9387</a>)</li> <li>Report <code>ot-baggage-*</code> extraction errors from <code>go.opentelemetry.io/contrib/propagators/ot</code> to <code>otel.Handle</code> instead of silently discarding them, while still attaching the successfully parsed baggage members to the context. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9395">#9395</a>)</li> <li>Set <code>error.type</code> on the <code>rpc.client.call.duration</code> and <code>rpc.server.call.duration</code> metrics in <code>go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc</code> when the RPC fails with a non-OK status, per the RPC semantic conventions. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9429">#9429</a>)</li> <li>Reject OTLP exporter headers with an empty <code>name</code> in <code>go.opentelemetry.io/contrib/otelconf</code>, <code>go.opentelemetry.io/contrib/otelconf/x</code>, and <code>go.opentelemetry.io/contrib/otelconf/v0.3.0</code>, instead of forwarding invalid header names to OTLP exporters. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9102">#9102</a>)</li> <li><code>go.opentelemetry.io/contrib/detectors/aws/lambda</code> no longer returns an error when run outside of an AWS Lambda environment, matching the no-op behavior of other resource detectors. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9464">#9464</a>)</li> <li>Convert Prometheus untyped metrics to OTLP Gauges in <code>go.opentelemetry.io/contrib/bridges/prometheus</code>. (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9099">#9099</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/c4c6248ec2289133b6a51f554ca9367ece1de8e7"><code>c4c6248</code></a> Release v1.46.0/v2.5.3/v0.71.0/v0.37.3/v0.26.0/v0.20.1/v0.16.3/v0.18.0 (<a href="https://redirect.github.com/open-telemetry/opentelemetry-go-contrib/issues/9563">#9563</a>)</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/11c8a13e60e734bb02185e78b1ad16c38c3e4d6d"><code>11c8a13</code></a> fix(deps): update aws-sdk-go-v2 monorepo</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/0458b9df1d1ea87bb7d156d3065a4626506daa22"><code>0458b9d</code></a> chore(deps): update module go.opentelemetry.io/contrib/instrumentation/net/ht...</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/638a0d5944d4f80d6d8d9dc17df30cf9f73a1e4c"><code>638a0d5</code></a> fix(deps): update module github.com/moby/moby/api to v1.55.0</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/5089aa5de995dcdc7bd96d7e8b36ce4be1ec3cbf"><code>5089aa5</code></a> chore(deps): update googleapis to da73d73</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/a50857b305dfa06fe469ff7bad5f22db0ecde3bb"><code>a50857b</code></a> chore(deps): update jaegertracing/jaeger docker tag to v2.20.0</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/aa4f4a577cec952b0444a0faeb98be04b13023a2"><code>aa4f4a5</code></a> chore(deps): update open-telemetry/shared-workflows action to v0.11.0</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/ccbbc14b559c3878fa017d1036ae8feb636ec4a5"><code>ccbbc14</code></a> fix(deps): update module github.com/aws/smithy-go to v1.28.0</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/9312464aaff2f556a115ab7a416566dc00c830f4"><code>9312464</code></a> chore(deps): update module github.com/docker/go-connections to v0.8.1</li> <li><a href="https://github.com/open-telemetry/opentelemetry-go-contrib/commit/36c3b006602a1e74f95eac0db1cefb5c423e1b4d"><code>36c3b00</code></a> chore(deps): update module github.com/felixge/httpsnoop to v1.1.0</li> <li>Additional commits viewable in <a href="https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.70.0...zpages/v0.71.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
8f89e24142 |
chore: bump github.com/nats-io/nats.go from 1.53.1 to 1.54.0 (#29712)
Bumps [github.com/nats-io/nats.go](https://github.com/nats-io/nats.go) from 1.53.1 to 1.54.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/nats-io/nats.go/releases">github.com/nats-io/nats.go's releases</a>.</em></p> <blockquote> <h2>Release v1.54.0</h2> <h2>Changelog</h2> <p>This release raises the minimum supported Go version to 1.26 and adds support for nats-server v2.15 stream and consumer info fields.</p> <h3>ADDED</h3> <ul> <li>Core NATS: <ul> <li><code>nats.MultipathTCP()</code> option to enable or disable MPTCP for outbound connections (<a href="https://redirect.github.com/nats-io/nats.go/issues/2145">#2145</a>)</li> <li><code>Conn.ConnectedDomain()</code> to read the JetStream domain advertised by the connected server (<a href="https://redirect.github.com/nats-io/nats.go/issues/2139">#2139</a>)</li> </ul> </li> <li>JetStream: <ul> <li><code>ClusterInfo.Desired</code>, <code>PeerInfo.Peer</code>, <code>PeerInfo.Pending</code> and <code>StreamSourceInfo.Seq</code> in stream and consumer info, reported by nats-server v2.15 (<a href="https://redirect.github.com/nats-io/nats.go/issues/2144">#2144</a>)</li> <li><code>Nats-Schedule-Rollup</code> header const and <code>WithScheduleRollup()</code> publish option (<a href="https://redirect.github.com/nats-io/nats.go/issues/2142">#2142</a>)</li> </ul> </li> </ul> <h3>FIXED</h3> <ul> <li>Core NATS: <ul> <li>Panic in <code>DecodeHeadersMsg</code> on inline status tokens shorter than 3 characters. Thanks <a href="https://github.com/nikitha-m"><code>@nikitha-m</code></a> for the contribution (<a href="https://redirect.github.com/nats-io/nats.go/issues/2101">#2101</a>)</li> <li>Data race on <code>Subscription.sid</code> between <code>applyNewSID</code> and <code>removeSub</code> (<a href="https://redirect.github.com/nats-io/nats.go/issues/2122">#2122</a>)</li> </ul> </li> <li>JetStream: <ul> <li><code>Messages()</code> iterator going silent after a reconnect that completes between <code>Next()</code> calls. Thanks <a href="https://github.com/1995parham"><code>@1995parham</code></a> for the contribution (<a href="https://redirect.github.com/nats-io/nats.go/issues/2135">#2135</a>)</li> <li>Legacy ordered consumer silently losing messages when the subscription hits its pending limits (<a href="https://redirect.github.com/nats-io/nats.go/issues/2137">#2137</a>)</li> <li>Legacy ordered consumer reset resurrecting an unsubscribed or draining subscription (<a href="https://redirect.github.com/nats-io/nats.go/issues/2133">#2133</a>)</li> </ul> </li> </ul> <h3>IMPROVED</h3> <ul> <li>Core NATS: <ul> <li>Avoid allocation when parsing header message arguments with a fifth token. Thanks <a href="https://github.com/0xAozora"><code>@0xAozora</code></a> for the contribution (<a href="https://redirect.github.com/nats-io/nats.go/issues/2130">#2130</a>)</li> <li>Preallocate reply subject buffers. Thanks <a href="https://github.com/0xAozora"><code>@0xAozora</code></a> for the contribution (<a href="https://redirect.github.com/nats-io/nats.go/issues/2123">#2123</a>)</li> </ul> </li> <li>JetStream: <ul> <li>Prevent <code>doErr</code> closure escaping to the heap in async publish reply handling. Thanks <a href="https://github.com/0xAozora"><code>@0xAozora</code></a> for the contribution (<a href="https://redirect.github.com/nats-io/nats.go/issues/2127">#2127</a>)</li> <li>Fix typo in <code>Publisher</code> interface methods comment. Thanks <a href="https://github.com/sreeram77"><code>@sreeram77</code></a> for the contribution (<a href="https://redirect.github.com/nats-io/nats.go/issues/2120">#2120</a>)</li> </ul> </li> <li>Minimum Go version is now 1.26 (<a href="https://redirect.github.com/nats-io/nats.go/issues/2146">#2146</a>)</li> <li>Bump <code>klauspost/compress</code> to v1.20.0 and <code>nkeys</code> to v0.4.16 (<a href="https://redirect.github.com/nats-io/nats.go/issues/2117">#2117</a>, <a href="https://redirect.github.com/nats-io/nats.go/issues/2146">#2146</a>)</li> <li>Tests run locally without docker via an in-process ntf tester (<a href="https://redirect.github.com/nats-io/nats.go/issues/2131">#2131</a>), and CI now runs against nats-server v2.15.0 (<a href="https://redirect.github.com/nats-io/nats.go/issues/2146">#2146</a>)</li> <li>Fix flaky cluster restart tests (<a href="https://redirect.github.com/nats-io/nats.go/issues/2141">#2141</a>) and list consumers test against latest server (<a href="https://redirect.github.com/nats-io/nats.go/issues/2138">#2138</a>)</li> </ul> <h3>Complete Changes</h3> <p><a href="https://github.com/nats-io/nats.go/compare/v1.53.1...v1.54.0">https://github.com/nats-io/nats.go/compare/v1.53.1...v1.54.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/nats-io/nats.go/commit/7a8404ab9b1721cf1eddf3a26474e6925c322d73"><code>7a8404a</code></a> Release v1.54.0 (<a href="https://redirect.github.com/nats-io/nats.go/issues/2148">#2148</a>)</li> <li><a href="https://github.com/nats-io/nats.go/commit/240fb1f70e767827b452d6a84c7fd91154087abc"><code>240fb1f</code></a> [IMPROVED] Bump dependencies and update server version in CI (<a href="https://redirect.github.com/nats-io/nats.go/issues/2146">#2146</a>)</li> <li><a href="https://github.com/nats-io/nats.go/commit/203d828938c8fca0c4fb237827bfe5442c70b955"><code>203d828</code></a> [FIXED] Panic in DecodeHeadersMsg on status tokens shorter than 3 characters ...</li> <li><a href="https://github.com/nats-io/nats.go/commit/dc92fca74760375f8b39af7d876f20db822e115f"><code>dc92fca</code></a> [FIXED] Ordered consumer silently losing messages on slow consumer (<a href="https://redirect.github.com/nats-io/nats.go/issues/2137">#2137</a>)</li> <li><a href="https://github.com/nats-io/nats.go/commit/e18cea8856fac7a4edf0771e0ec21a449400d266"><code>e18cea8</code></a> [IMPROVED] Prevent doErr closure escaping to heap (<a href="https://redirect.github.com/nats-io/nats.go/issues/2127">#2127</a>)</li> <li><a href="https://github.com/nats-io/nats.go/commit/d8d8c09b40bc5aec7220cee84a83f4bcab1e6dd0"><code>d8d8c09</code></a> [ADDED] <code>nats.MultipathTCP()</code> for enabling or disabling MPTCP (<a href="https://redirect.github.com/nats-io/nats.go/issues/2145">#2145</a>)</li> <li><a href="https://github.com/nats-io/nats.go/commit/e95c424b2c8d91fe16fd3426b80c88f13261761a"><code>e95c424</code></a> [FIXED] Flaky cluster restart tests: waitForStream must see a stream leader (...</li> <li><a href="https://github.com/nats-io/nats.go/commit/e3abbf43eccdb37ef7c4bd2d777d57bc44e09955"><code>e3abbf4</code></a> [ADDED] Nats-Schedule-Rollup header const and publish options (<a href="https://redirect.github.com/nats-io/nats.go/issues/2142">#2142</a>)</li> <li><a href="https://github.com/nats-io/nats.go/commit/f1289db0bb7a5a560b26ddc7c8f29665b6341c90"><code>f1289db</code></a> [ADDED] Desired state, peer ID/pending and source seq in stream and consumer ...</li> <li><a href="https://github.com/nats-io/nats.go/commit/b84f783a7b99e1c54e5a5ebc83936a3a72dc2fd8"><code>b84f783</code></a> Ignore Claude Code local files and .worktrees (<a href="https://redirect.github.com/nats-io/nats.go/issues/2140">#2140</a>)</li> <li>Additional commits viewable in <a href="https://github.com/nats-io/nats.go/compare/v1.53.1...v1.54.0">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
b132f709a8 |
chore: bump github.com/hashicorp/hcl/v2 from 2.24.0 to 2.25.0 (#29711)
Bumps [github.com/hashicorp/hcl/v2](https://github.com/hashicorp/hcl) from 2.24.0 to 2.25.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/hashicorp/hcl/releases">github.com/hashicorp/hcl/v2's releases</a>.</em></p> <blockquote> <h2>v2.25.0</h2> <h2>Enhancements</h2> <ul> <li>Go: Upgrade compatibility from 1.24 to 1.25 (<a href="https://redirect.github.com/hashicorp/hcl/pull/798">#798</a>)</li> <li>hclwrite: Export <code>LeadComments()</code>/<code>LineComments()</code> (<a href="https://redirect.github.com/hashicorp/hcl/pull/807">#807</a>)</li> <li>hclwrite: <code>body.SetAttribute*</code> return new attribute (<a href="https://redirect.github.com/hashicorp/hcl/pull/806">#806</a>)</li> <li>hclwrite: <code>Block.SetType</code> sets type (<a href="https://redirect.github.com/hashicorp/hcl/pull/808">#808</a>)</li> <li>Prepare for Unicode 17 support in Go 1.27 (<a href="https://redirect.github.com/hashicorp/hcl/pull/814">#814</a>)</li> </ul> <h2>Bug Fixes</h2> <ul> <li><code>DiagnosticWriter</code>: Skip marked values when writing diagnostics (<a href="https://redirect.github.com/hashicorp/hcl/pull/739">#739</a>)</li> <li>hclsyntax: Set <code>CloseBraceRange</code> to last label in error-recovered blocks (<a href="https://redirect.github.com/hashicorp/hcl/pull/786">#786</a>)</li> <li>hclsyntax: Add partially complete items in nested <code>ObjectConsItem</code> on error (<a href="https://redirect.github.com/hashicorp/hcl/pull/785">#785</a>)</li> </ul> <h2>Internal</h2> <ul> <li>deps: bump golang.org/x/crypto from 0.38.0 to 0.45.0 (<a href="https://redirect.github.com/hashicorp/hcl/pull/774">#774</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/hashicorp/hcl/blob/main/CHANGELOG.md">github.com/hashicorp/hcl/v2's changelog</a>.</em></p> <blockquote> <h1>HCL Changelog</h1> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/hashicorp/hcl/commit/00057cf06d7b38a3f89e6e54d622eee98322b314"><code>00057cf</code></a> Prepare for Unicode 17 support in Go 1.27 (<a href="https://redirect.github.com/hashicorp/hcl/issues/814">#814</a>)</li> <li><a href="https://github.com/hashicorp/hcl/commit/7338a7d5fb8dbf1fd7ec6fdcd66fea202916bb38"><code>7338a7d</code></a> github: Add consistency test for generated code (<a href="https://redirect.github.com/hashicorp/hcl/issues/834">#834</a>)</li> <li><a href="https://github.com/hashicorp/hcl/commit/2f8831b8351c51cd74365975bbb1d2c28f91de7b"><code>2f8831b</code></a> github: Filter out Ragel files from coverage report (<a href="https://redirect.github.com/hashicorp/hcl/issues/833">#833</a>)</li> <li><a href="https://github.com/hashicorp/hcl/commit/d9882d1b450069e3a0eaeefd74fe47e9c0a8d660"><code>d9882d1</code></a> hclsyntax: Update copyright year in generated files (<a href="https://redirect.github.com/hashicorp/hcl/issues/832">#832</a>)</li> <li><a href="https://github.com/hashicorp/hcl/commit/60329236815b0d902d0be274a4441e58a5341ea0"><code>6032923</code></a> hclsyntax: Re-run stringer to update generated comments (<a href="https://redirect.github.com/hashicorp/hcl/issues/831">#831</a>)</li> <li><a href="https://github.com/hashicorp/hcl/commit/6abbb088cdb82416d1b3d9fcbaab29534133567a"><code>6abbb08</code></a> Merge pull request <a href="https://redirect.github.com/hashicorp/hcl/issues/827">#827</a> from hashicorp/james-warren0/security-doc-tweaks</li> <li><a href="https://github.com/hashicorp/hcl/commit/425fdf944aa10f277d353c49f5eb7a73200c711e"><code>425fdf9</code></a> Implement feedback provided in <a href="https://redirect.github.com/hashicorp/hcl/pull/826">hashicorp/hcl#826</a></li> <li><a href="https://github.com/hashicorp/hcl/commit/2a3b67226841b8c4c2132068c8fb74947fe2e0b3"><code>2a3b672</code></a> Merge pull request <a href="https://redirect.github.com/hashicorp/hcl/issues/826">#826</a> from hashicorp/james-warren0/security-model</li> <li><a href="https://github.com/hashicorp/hcl/commit/42ccbc0e16b343d3768544e0db9450e0b8e6cb96"><code>42ccbc0</code></a> Add security model documentation</li> <li><a href="https://github.com/hashicorp/hcl/commit/6bf1a67a9381988ec9d660b405a83dfc8b5fcf2a"><code>6bf1a67</code></a> Merge pull request <a href="https://redirect.github.com/hashicorp/hcl/issues/808">#808</a> from hashicorp/bbasata/set-type</li> <li>Additional commits viewable in <a href="https://github.com/hashicorp/hcl/compare/v2.24.0...v2.25.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
43d63b1091 |
ci: bump the github-actions group with 3 updates (#29717)
Bumps the github-actions group with 3 updates: [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) and [linear/linear-release-action](https://github.com/linear/linear-release-action). Updates `aws-actions/configure-aws-credentials` from 6.2.4 to 6.3.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/aws-actions/configure-aws-credentials/releases">aws-actions/configure-aws-credentials's releases</a>.</em></p> <blockquote> <h2>v6.3.0</h2> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.4...v6.3.0">6.3.0</a> (2026-09-11)</h2> <h3>Features</h3> <ul> <li>add translate-env-variables option (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1961">#1961</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/57b83659c2db2eb3b9c655186bef9a6a8f6620cb">57b8365</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md">aws-actions/configure-aws-credentials's changelog</a>.</em></p> <blockquote> <h1>Changelog</h1> <p>All notable changes to this project will be documented in this file. See <a href="https://github.com/conventional-changelog/standard-version">standard-version</a> for commit guidelines.</p> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.4...v6.3.0">6.3.0</a> (2026-09-11)</h2> <h3>Features</h3> <ul> <li>add translate-env-variables option (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1961">#1961</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/57b83659c2db2eb3b9c655186bef9a6a8f6620cb">57b8365</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.3...v6.2.4">6.2.4</a> (2026-08-31)</h2> <h3>Bug Fixes</h3> <ul> <li>account-ids handling, mask proxy as secret in logs (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1943">#1943</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/aa6526434b08748f8776b29964e3f1f5d90e7b63">aa65264</a>)</li> <li>skip backoff sleep after the final retryAndBackoff attempt (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1937">#1937</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/3852440c21363386b7b790605685d08a7c1a4876">3852440</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.2...v6.2.3">6.2.3</a> (2026-07-22)</h2> <h3>Bug Fixes</h3> <ul> <li>attach git credentials before Tag Major Version push (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1877">#1877</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/9ae780b171afa8c5a3a6a2d154a765b709492482">9ae780b</a>)</li> <li>PackedPolicyTooLarge detection in STS tags (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1899">#1899</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/fa8d6a57bbf44b34439fb080bbdadc7c92c285eb">fa8d6a5</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.1...v6.2.2">6.2.2</a> (2026-07-07)</h2> <h3>Miscellaneous Chores</h3> <ul> <li>release 6.2.2 (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/d01d678e65d6d2bd9d5ca7a95d6f07b00e25f2c2">d01d678</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.2.0...v6.2.1">6.2.1</a> (2026-06-26)</h2> <h3>Bug Fixes</h3> <ul> <li>enforce allowed-account-ids on all auth paths (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1847">#1847</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/4d281fbc56a82e63c3fc14f2cc22361f34c97493">4d281fb</a>)</li> </ul> <h2><a href="https://github.com/aws-actions/configure-aws-credentials/compare/v6.1.3...v6.2.0">6.2.0</a> (2026-06-01)</h2> <h3>Features</h3> <ul> <li>add additional session tags by default (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1775">#1775</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/e0ba7685077379a14a82d01fefd511490344ebfc">e0ba768</a>)</li> <li>add more retry logic and better logging (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1764">#1764</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/540d0c13aedb8d55501d220bd2f0b3cdedfe84e8">540d0c1</a>)</li> <li>add regex validation to role-session-name (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1765">#1765</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/e35449909c6ede5083a48ba4b8bbfaaa1cf09ba1">e354499</a>)</li> <li>Allow custom session tags to be passed when assuming a role (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1759">#1759</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/61f50f630f383628add73c1eab3f1935ba07da2b">61f50f6</a>)</li> <li>expose run id in STS client user-agent (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1774">#1774</a>) (<a href="https://github.com/aws-actions/configure-aws-credentials/commit/29d1be30273e7ef371d59fccf6ec54572c64ec89">29d1be3</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/e1253824e5c10ff9df46874f81ed3ec929e19cfd"><code>e125382</code></a> chore(main): release 6.3.0 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1963">#1963</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/438100a0eb37d9180319c727b1e108d9a112a27a"><code>438100a</code></a> chore: add link to GH security docs (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1962">#1962</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/e92ebccf3986be80a7535da17f1ed57aec450139"><code>e92ebcc</code></a> chore: Update dist</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/57b83659c2db2eb3b9c655186bef9a6a8f6620cb"><code>57b8365</code></a> feat: add translate-env-variables option (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1961">#1961</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/cc49fa741eb53f7c83be6fce8f9b4df000cd3af7"><code>cc49fa7</code></a> chore(docs): README main branch guidance (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1960">#1960</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/866cb167f1d1a75ae9c75cdb39377cfd9c0f794e"><code>866cb16</code></a> chore(deps-dev): bump smol-toml from 1.7.0 to 1.7.2 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1958">#1958</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/6782cb1b6df5d32e9354c1e6d6da4f956c0d61c4"><code>6782cb1</code></a> chore(deps-dev): bump generate-license-file from 4.2.4 to 4.2.5 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1951">#1951</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/c20509ac5cba30e782e34cf33a0067e67c746cf0"><code>c20509a</code></a> chore: Update dist</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/7a41fc6cd2b4970e71974e29fb3f0979f4eb20cb"><code>7a41fc6</code></a> chore(deps): bump <code>@aws-sdk/client-sts</code> from 3.1121.0 to 3.1127.0 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1954">#1954</a>)</li> <li><a href="https://github.com/aws-actions/configure-aws-credentials/commit/726b71346f7761addb59879a6c73e0c64ec8f959"><code>726b713</code></a> chore(deps-dev): bump <code>@biomejs/biome</code> from 2.5.11 to 2.5.12 (<a href="https://redirect.github.com/aws-actions/configure-aws-credentials/issues/1957">#1957</a>)</li> <li>Additional commits viewable in <a href="https://github.com/aws-actions/configure-aws-credentials/compare/cbe3b392738ccf3f987d68400dafcf4b0624a56c...e1253824e5c10ff9df46874f81ed3ec929e19cfd">compare view</a></li> </ul> </details> <br /> Updates `docker/setup-buildx-action` from 4.3.0 to 4.4.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/docker/setup-buildx-action/releases">docker/setup-buildx-action's releases</a>.</em></p> <blockquote> <h2>v4.4.0</h2> <ul> <li>Use official Buildx releases for cloud driver by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/606">docker/setup-buildx-action#606</a></li> <li>Pull BuildKit image before builder creation by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/609">docker/setup-buildx-action#609</a></li> <li>Use shared error helpers for Buildx and Docker commands by <a href="https://github.com/crazy-max"><code>@crazy-max</code></a> in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/620">docker/setup-buildx-action#620</a></li> <li>Bump <code>@docker/actions-toolkit</code> from 0.95.0 to 0.100.0 in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/610">docker/setup-buildx-action#610</a> <a href="https://redirect.github.com/docker/setup-buildx-action/pull/618">docker/setup-buildx-action#618</a> <a href="https://redirect.github.com/docker/setup-buildx-action/pull/619">docker/setup-buildx-action#619</a></li> <li>Bump <code>@humanfs/node</code> from 0.16.7 to 0.16.8 in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/614">docker/setup-buildx-action#614</a></li> <li>Bump js-yaml from 5.3.0 to 5.4.2 in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/608">docker/setup-buildx-action#608</a> <a href="https://redirect.github.com/docker/setup-buildx-action/pull/617">docker/setup-buildx-action#617</a></li> <li>Bump postcss-selector-parser from 7.1.1 to 7.1.5 in <a href="https://redirect.github.com/docker/setup-buildx-action/pull/611">docker/setup-buildx-action#611</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/docker/setup-buildx-action/compare/v4.3.0...v4.4.0">https://github.com/docker/setup-buildx-action/compare/v4.3.0...v4.4.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/docker/setup-buildx-action/commit/594f3bf4285d9ea8dc53c9a0c9c4092420091003"><code>594f3bf</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-buildx-action/issues/609">#609</a> from crazy-max/pull-buildkit-image-before-create</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/bd6e702fc33b636671900d5b5edfab64698c9c25"><code>bd6e702</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/6268c9da9abbd1309c8a16a75f92a878715c3032"><code>6268c9d</code></a> pull BuildKit image before builder creation</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/e8235251b82e23c90e6fad50016f0a78b7f28f11"><code>e823525</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-buildx-action/issues/621">#621</a> from docker/dependabot/github_actions/codeql-actions-...</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/533ed8ed095b0b133ef16fb495aad119524e220d"><code>533ed8e</code></a> build(deps): bump the codeql-actions group with 2 updates</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/bedaf135699075c88620cd30772b9b6eadc9ba99"><code>bedaf13</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-buildx-action/issues/620">#620</a> from crazy-max/shared-error-helpers</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/d5079fba84d5edd23d25ba7f3045122175ca6ee2"><code>d5079fb</code></a> chore: update generated content</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/226a61612ab71c26bbd805f955834049a4a9772f"><code>226a616</code></a> use shared error helpers for Buildx and Docker commands</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/77ce7f4bab9bc462d825001cde7f82d409ee474c"><code>77ce7f4</code></a> Merge pull request <a href="https://redirect.github.com/docker/setup-buildx-action/issues/619">#619</a> from docker/dependabot/npm_and_yarn/docker/actions-to...</li> <li><a href="https://github.com/docker/setup-buildx-action/commit/0dc1dc94f0f7c064e93fda72884ca71e054c0354"><code>0dc1dc9</code></a> [dependabot skip] chore: update generated content</li> <li>Additional commits viewable in <a href="https://github.com/docker/setup-buildx-action/compare/37fe631027851001ddb9b187196cc803df7f5f0e...594f3bf4285d9ea8dc53c9a0c9c4092420091003">compare view</a></li> </ul> </details> <br /> Updates `linear/linear-release-action` from 0.17.2 to 0.18.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/linear/linear-release-action/releases">linear/linear-release-action's releases</a>.</em></p> <blockquote> <h2>v0.18.0</h2> <h2>What's Changed</h2> <ul> <li>Add no_branch_ref_detection action input by <a href="https://github.com/axelniklasson"><code>@axelniklasson</code></a> in <a href="https://redirect.github.com/linear/linear-release-action/pull/68">linear/linear-release-action#68</a></li> <li>Release v0.18.0 by <a href="https://github.com/axelniklasson"><code>@axelniklasson</code></a> in <a href="https://redirect.github.com/linear/linear-release-action/pull/69">linear/linear-release-action#69</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/linear/linear-release-action/compare/v0.17.2...v0.18.0">https://github.com/linear/linear-release-action/compare/v0.17.2...v0.18.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/linear/linear-release-action/commit/d4af10092984f9bc6d5efa075b242bdf01333463"><code>d4af100</code></a> Release v0.18.0 (<a href="https://redirect.github.com/linear/linear-release-action/issues/69">#69</a>)</li> <li><a href="https://github.com/linear/linear-release-action/commit/b0926c73eb90042bc522f79007b785ad1ceae1ae"><code>b0926c7</code></a> Add branch ref detection opt-out input (<a href="https://redirect.github.com/linear/linear-release-action/issues/68">#68</a>)</li> <li>See full diff in <a href="https://github.com/linear/linear-release-action/compare/53ad0f863963e7f8e270fba18426bbb55ef55384...d4af10092984f9bc6d5efa075b242bdf01333463">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
5f0d070c6d |
chore: bump github.com/aws/aws-sdk-go-v2/service/bedrock from 1.72.0 to 1.73.0 (#29713)
Bumps [github.com/aws/aws-sdk-go-v2/service/bedrock](https://github.com/aws/aws-sdk-go-v2) from 1.72.0 to 1.73.0. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/8fac7d48b4707a8fdd9cb23b34b928fc83e38777"><code>8fac7d4</code></a> Release 2025-01-15</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/9eff8acbf1cc8bb294171b969a8e2803bf235a07"><code>9eff8ac</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/f47aa72637a4492512213811a314dda0b9c9a189"><code>f47aa72</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/5934dd36b8ecbc42a321216e8da721e1258ae8a8"><code>5934dd3</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/6636822440828c3eebaacfe9a182c9eb47895236"><code>6636822</code></a> feat: flexible checksum updates (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/2808">#2808</a>)</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/4ffbb7cbe6bfeebb50a773d45df57d3fd126cafb"><code>4ffbb7c</code></a> Release 2025-01-14</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/2f70ff490c3474a59ca29dc2661ec5e4f13ec2f7"><code>2f70ff4</code></a> Regenerated Clients</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/434159f5c088eb7b484fea9179d6c5e6302e4610"><code>434159f</code></a> Update endpoints model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/a80fac9aee1efaac1d16f4005ccc93fed22c62c3"><code>a80fac9</code></a> Update API model</li> <li><a href="https://github.com/aws/aws-sdk-go-v2/commit/44e779abca3ec6dfdc9415ced6af0aa684149bd1"><code>44e779a</code></a> fix several waiter issues (<a href="https://redirect.github.com/aws/aws-sdk-go-v2/issues/2953">#2953</a>)</li> <li>Additional commits viewable in <a href="https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.72.0...service/s3/v1.73.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
ea7e67ffc6 |
chore: bump github.com/dustin/go-humanize from 1.0.1 to 1.1.0 (#29709)
Bumps [github.com/dustin/go-humanize](https://github.com/dustin/go-humanize) from 1.0.1 to 1.1.0. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/dustin/go-humanize/commit/40736da3e8ed16369b5e6f109548f243d43a7e34"><code>40736da</code></a> Fix <a href="https://redirect.github.com/dustin/go-humanize/issues/105">#105</a></li> <li><a href="https://github.com/dustin/go-humanize/commit/528b6f774c2b2dee6e5b25ab302774b530ae6bd0"><code>528b6f7</code></a> Fix <a href="https://redirect.github.com/dustin/go-humanize/issues/85">#85</a></li> <li><a href="https://github.com/dustin/go-humanize/commit/2ccb40ff40263df6ede3d42093de3b7b0eaeb4ae"><code>2ccb40f</code></a> Fix <a href="https://redirect.github.com/dustin/go-humanize/issues/103">#103</a></li> <li><a href="https://github.com/dustin/go-humanize/commit/0509d5bf3e4a84cd3c8d15e7cd5fdb929da99cb4"><code>0509d5b</code></a> feat: add ParseComma and ParseCommaf with doc comments and epsilon test</li> <li><a href="https://github.com/dustin/go-humanize/commit/0a173b2bf17e0d69adb87075a5d4be6ed1778569"><code>0a173b2</code></a> Increase big coverage</li> <li><a href="https://github.com/dustin/go-humanize/commit/ca34c614782166f4f18ebda2220821345d1120d1"><code>ca34c61</code></a> Bump actions/setup-go from 6.1.0 to 6.3.0</li> <li><a href="https://github.com/dustin/go-humanize/commit/da71bb0bb0c53c256cc7b7327f6cf67543482bd8"><code>da71bb0</code></a> Bump actions/checkout from 5.0.1 to 6.0.2</li> <li><a href="https://github.com/dustin/go-humanize/commit/d02cffb61101b0ade0441980df6caac451df52a5"><code>d02cffb</code></a> si: accept the Greek letter mu as an alias for µ in ParseSI</li> <li><a href="https://github.com/dustin/go-humanize/commit/0f3681d75bde8bf3ec92c1e93ced08db194b9ba3"><code>0f3681d</code></a> Round off coverage of big</li> <li><a href="https://github.com/dustin/go-humanize/commit/ed9405309df9d8e81a3aef835fde2271c8342128"><code>ed94053</code></a> Increase bytes parsing coverage</li> <li>Additional commits viewable in <a href="https://github.com/dustin/go-humanize/compare/v1.0.1...v1.1.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
734674d91f |
chore: bump go.uber.org/atomic from 1.11.0 to 1.12.0 (#29708)
Bumps [go.uber.org/atomic](https://github.com/uber-go/atomic) from 1.11.0 to 1.12.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/uber-go/atomic/releases">go.uber.org/atomic's releases</a>.</em></p> <blockquote> <h2>v1.12.0</h2> <h3>Added</h3> <ul> <li>Add <code>MarshalJSON</code> and <code>UnmarshalJSON</code> method to <code>atomic.Pointer[T]</code> type allowing users to use pointer with json.</li> <li>Add <code>MarshalJSON</code> and <code>UnmarshalJSON</code> methods to <code>atomic.Time</code> so it encodes and decodes the wrapped <code>time.Time</code> instead of an empty struct.</li> </ul> <h3>Updated</h3> <ul> <li>Bumped <a href="https://github.com/stretchr/testify">https://github.com/stretchr/testify</a> to v1.12.1.</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/uber-go/atomic/compare/v1.11.0...v1.12.0">https://github.com/uber-go/atomic/compare/v1.11.0...v1.12.0</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/uber-go/atomic/blob/master/CHANGELOG.md">go.uber.org/atomic's changelog</a>.</em></p> <blockquote> <h2><a href="https://github.com/uber-go/atomic/compare/v1.11.0...v1.12.0">1.12.0</a> - 2026-09-17</h2> <h3>Added</h3> <ul> <li>Add <code>MarshalJSON</code> and <code>UnmarshalJSON</code> method to <code>atomic.Pointer[T]</code> type allowing users to use pointer with json.</li> <li>Add <code>MarshalJSON</code> and <code>UnmarshalJSON</code> methods to <code>atomic.Time</code> so it encodes and decodes the wrapped <code>time.Time</code> instead of an empty struct.</li> </ul> <h3>Updated</h3> <ul> <li>Bumped <a href="https://github.com/stretchr/testify">https://github.com/stretchr/testify</a> to v1.12.1.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/uber-go/atomic/commit/786022ac59d00afe247630b7a419ccb224d4cd21"><code>786022a</code></a> Preparing release v1.12.0 (<a href="https://redirect.github.com/uber-go/atomic/issues/214">#214</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/cf206eda0552c915e021a75c8f01e8a258d93cd1"><code>cf206ed</code></a> atomic.Time: add MarshalJSON / UnmarshalJSON (<a href="https://redirect.github.com/uber-go/atomic/issues/208">#208</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/c8c46988a7cb9be0f75f49d63c4872aaf08b2866"><code>c8c4698</code></a> test: assert Value.Store(nil) panics in value_test.go (<a href="https://redirect.github.com/uber-go/atomic/issues/211">#211</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/92e5b30da4154d19ed04db1187f401c711a936a8"><code>92e5b30</code></a> test(string): add Text/MarshalUnmarshal subtest to TestString (<a href="https://redirect.github.com/uber-go/atomic/issues/212">#212</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/db66dadd56cd30bd19e038d6313369a6c38b3339"><code>db66dad</code></a> use CompareAndSwap instead of the deprecated CAS shim internally (<a href="https://redirect.github.com/uber-go/atomic/issues/209">#209</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/3ffc65932333b1469e85d835a39ac434bc04061c"><code>3ffc659</code></a> Bump actions/setup-go from 5.2.0 to 7.0.0 (<a href="https://redirect.github.com/uber-go/atomic/issues/204">#204</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/73e4e6db86f0b501ba396f0043d0544512e7b22d"><code>73e4e6d</code></a> Bump actions/cache from 4.2.0 to 6.1.0 (<a href="https://redirect.github.com/uber-go/atomic/issues/205">#205</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/a6550e5e77b7de2f48c8bed227536bd3d342768b"><code>a6550e5</code></a> Bump codecov/codecov-action from 4.6.0 to 7.1.0 (<a href="https://redirect.github.com/uber-go/atomic/issues/206">#206</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/a1b118def3d78f368f04de0f03fe4d21c6aa4be1"><code>a1b118d</code></a> chore(deps): update stretchr/testify to 1.12.1 (<a href="https://redirect.github.com/uber-go/atomic/issues/213">#213</a>)</li> <li><a href="https://github.com/uber-go/atomic/commit/703f34c27411b863572156a97e9b659ff96e1d36"><code>703f34c</code></a> Fix typos in test and gen-atomicwrapper (<a href="https://redirect.github.com/uber-go/atomic/issues/190">#190</a>)</li> <li>Additional commits viewable in <a href="https://github.com/uber-go/atomic/compare/v1.11.0...v1.12.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
41ff82336e |
chore: bump github.com/nats-io/nats-server/v2 from 2.14.2 to 2.15.0 (#29714)
Bumps [github.com/nats-io/nats-server/v2](https://github.com/nats-io/nats-server) from 2.14.2 to 2.15.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/nats-io/nats-server/releases">github.com/nats-io/nats-server/v2's releases</a>.</em></p> <blockquote> <h2>Release v2.15.0</h2> <h2>Changelog</h2> <p>Refer to the <a href="https://docs.nats.io/release-notes/upgrade-to-2.15">2.15 Upgrade Guide</a> for backwards compatibility notes with 2.14.x. This release also contains all changes up to and including <a href="https://github.com/nats-io/nats-server/releases/tag/v2.14.7">v2.14.7</a>.</p> <h3>Go Version</h3> <ul> <li>1.27.1 (<a href="https://redirect.github.com/nats-io/nats-server/issues/8551">#8551</a>)</li> </ul> <h3>Added</h3> <p>JetStream</p> <ul> <li>Desired state metalayer (<a href="https://redirect.github.com/nats-io/nats-server/issues/8432">#8432</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8437">#8437</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8439">#8439</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8443">#8443</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8452">#8452</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8460">#8460</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8476">#8476</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8576">#8576</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8598">#8598</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8602">#8602</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8603">#8603</a>) <ul> <li>A new desired state reconciliation engine for streams and consumers considerably improves the safety and reliability of asset moves and scales</li> <li>Updating the placement or replication factor midway through an existing scale/move operation, cancelling an in-flight scale/move, or peer-removing is now much safer</li> <li>ADR: <a href="https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md">https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md</a></li> </ul> </li> <li>Cancel stream move endpoint (<a href="https://redirect.github.com/nats-io/nats-server/issues/8476">#8476</a>) <ul> <li>An in-flight scale/move operation on a stream can be cancelled and the asset returned to its original placement using the new <code>$JS.API.STREAM.CANCEL_MOVE</code> endpoint</li> <li>ADR: <a href="https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md">https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md</a></li> </ul> </li> <li>Evacuate endpoints (<a href="https://redirect.github.com/nats-io/nats-server/issues/8443">#8443</a>) <ul> <li>The new <code>$JS.API.SERVER.EVACUATE</code> endpoint can safely evacuate streams, and any consumers on those streams, from a node</li> <li>The new <code>$JS.API.STREAM.PEER.EVACUATE.*</code> endpoint can safely evacuate a peer, and any consumers on that peer, from a stream</li> <li>These operations combined allow for maintenance operations with full transfer of data and state without having to peer-remove first</li> <li>ADR: <a href="https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md">https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md</a></li> </ul> </li> <li>Metalayer rescue for disaster recovery (<a href="https://redirect.github.com/nats-io/nats-server/issues/8408">#8408</a>) <ul> <li>The new <code>$JS.API.META.RESCUE</code> endpoint can temporarily lower the quorum-needed for the metalayer, in order to facilitate the recovery of a system where nodes have been permanently lost and the metalayer cannot reach quorum</li> <li>ADR: <a href="https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-61.md">https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-61.md</a></li> </ul> </li> <li>Stream backup and restore v2 (<a href="https://redirect.github.com/nats-io/nats-server/issues/7882">#7882</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8584">#8584</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8591">#8591</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8604">#8604</a>) <ul> <li>A new backup format for stream snapshots which reads out per-message rather than per-block</li> <li>The new backup format also now correctly includes non-replicated consumers on follower nodes</li> <li>ADR: <a href="https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-63.md">https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-63.md</a></li> </ul> </li> <li>Detect source stream recreation (<a href="https://redirect.github.com/nats-io/nats-server/issues/8384">#8384</a>) <ul> <li>The server now detects a source stream being recreated, restarting the sourcing back from the beginning, ensuring new messages are sourced</li> </ul> </li> <li>Stream source indexing (<a href="https://redirect.github.com/nats-io/nats-server/issues/8282">#8282</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8516">#8516</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8283">#8283</a>) <ul> <li>Restarts and leader changes previously required expensive backward scans through the stream to find the last sourced indices. These are now persisted in an index for instant lookup.</li> </ul> </li> <li>Domain-prefixed JS API in system account (<a href="https://redirect.github.com/nats-io/nats-server/issues/8429">#8429</a>) <ul> <li>When a system account is bridged between the hub and a leaf node, the domain-prefixed JS API can now be used to operate on the leaf node while directly connected to the hub</li> </ul> </li> </ul> <h3>Changed</h3> <p>JetStream</p> <ul> <li>Streams now have a default limit of 1000 consumers, unless <code>max_consumers</code> is specified in the stream config or account limits (<a href="https://redirect.github.com/nats-io/nats-server/issues/8337">#8337</a>, <a href="https://redirect.github.com/nats-io/nats-server/issues/8566">#8566</a>) <ul> <li>Applications planning to use a large number of consumers on a stream should configure <code>max_consumers</code> in the stream config or account limits to an appropriately high number</li> <li>The server-wide default of 1000 can be overridden by setting <code>default_max_consumers</code> in the JetStream limits, or can be disabled by setting to <code>-1</code></li> <li>This limit does not affect existing consumers and will not result in consumer deletions, only the creation of new consumers is prevented</li> </ul> </li> <li>Sync changes for replicated streams (<a href="https://redirect.github.com/nats-io/nats-server/issues/8447">#8447</a>) <ul> <li>When the <code>sync_interval</code> is set to <code>always</code>, replicated streams now sync their WAL entries but no longer sync upper stream layer writes</li> <li>The synced log allows the stream to recover safely, but removing unnecessary syncs from the upper stream layer dramatically improves performance</li> </ul> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/nats-io/nats-server/commit/eb763679aa3c24a40dcd3012aa046ad1996d851c"><code>eb76367</code></a> Release v2.15.0</li> <li><a href="https://github.com/nats-io/nats-server/commit/8f3f31b0366eca0d855d0750b7ca547eadd10eff"><code>8f3f31b</code></a> [FIXED] Config reload disconnects operator mode clients sending an nkey (<a href="https://redirect.github.com/nats-io/nats-server/issues/8609">#8609</a>)</li> <li><a href="https://github.com/nats-io/nats-server/commit/7d7724070d088d44e9da2ec74fffc040277f6af8"><code>7d77240</code></a> [FIXED] Stream scale down into a missing account tier was accepted (<a href="https://redirect.github.com/nats-io/nats-server/issues/8608">#8608</a>)</li> <li><a href="https://github.com/nats-io/nats-server/commit/e46d21fcfa6720c6ca0b7ed17070dd172b011a8a"><code>e46d21f</code></a> [FIXED] Concurrent account updates invalidating stream imports (<a href="https://redirect.github.com/nats-io/nats-server/issues/8610">#8610</a>)</li> <li><a href="https://github.com/nats-io/nats-server/commit/2ecd77a6fef7b35ebb229d0b401645a2f79ce1b4"><code>2ecd77a</code></a> De-flake TestJetStreamClusterHardKillAfterStreamAdd</li> <li><a href="https://github.com/nats-io/nats-server/commit/901df7858b812ee5896cb018e8b134167f6158e7"><code>901df78</code></a> De-flake TestJetStreamClusterAccountMaxConnectionsReconnect</li> <li><a href="https://github.com/nats-io/nats-server/commit/e133a1ffb04661d0d862c1ab65f37b930acb01bb"><code>e133a1f</code></a> De-flake TestJetStreamClusterMessageTTLCatchup</li> <li><a href="https://github.com/nats-io/nats-server/commit/2990f6c065b9b3013eb8f60f5f5b96d4b9f55a03"><code>2990f6c</code></a> [FIXED] Concurrent account updates invalidating stream imports</li> <li><a href="https://github.com/nats-io/nats-server/commit/51fd55fdbb2b1569cdb67be742295235f14bc4da"><code>51fd55f</code></a> De-flake TestJWTImportsOnServerRestartAndClientsReconnect</li> <li><a href="https://github.com/nats-io/nats-server/commit/6a82cf9beb53f37e1f9a91e7707a04bb0f8709b4"><code>6a82cf9</code></a> De-flake TestNoRaceRouteSendSubs</li> <li>Additional commits viewable in <a href="https://github.com/nats-io/nats-server/compare/v2.14.2...v2.15.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
005029a916 |
chore: bump google.golang.org/grpc from 1.83.2 to 1.84.0 (#29710)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.83.2 to 1.84.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc-go/releases">google.golang.org/grpc's releases</a>.</em></p> <blockquote> <h2>Release 1.84.0</h2> <h1>Behavior Changes</h1> <ul> <li>stats/otel: The <code>grpc.lb.pick_first.*</code> metrics have been removed and replaced with <code>grpc.subchannel.*</code> metrics. See <a href="https://github.com/grpc/proposal/blob/master/A94-subchannel-otel-metrics.md">gRFC A94</a> for more details. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9215">#9215</a>)</li> </ul> <h1>New Features</h1> <ul> <li>xds: Add support for <code>contains_match</code> in route header matchers. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9223">#9223</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> </ul> <h1>Bug Fixes</h1> <ul> <li>client: Fix a bug where a <code>ClientConn</code> could get permanently stuck in IDLE when an RPC was canceled during stream creation. Previously, such cancellations triggered stream cleanup twice, corrupting the channel's idleness state and causing subsequent RPCs to fail with deadline exceeded errors. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9191">#9191</a>) <ul> <li>Special Thanks: <a href="https://github.com/utkuozdemir"><code>@utkuozdemir</code></a></li> </ul> </li> <li>client: Fix a bug where non-gRPC HTTP responses ending with an empty DATA frame failed the RPC with status code <code>Internal</code> instead of preserving the HTTP-mapped status code and response body. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9217">#9217</a>) <ul> <li>Special Thanks: <a href="https://github.com/chengxilo"><code>@chengxilo</code></a></li> </ul> </li> <li>credentials: Validate metadata returned by per-RPC credentials, failing the RPC with status code <code>Internal</code> if invalid keys or values are found. Previously, invalid metadata from credentials was sent to the server in outgoing HTTP/2 requests. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9202">#9202</a>) <ul> <li>Special Thanks: <a href="https://github.com/buger"><code>@buger</code></a></li> </ul> </li> <li>credentials/sts: Prevent potential token leakage by disallowing HTTP redirects during STS token exchange. Previously, 3xx redirects were followed automatically, replaying the request body containing authentication tokens to the redirect destination. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9299">#9299</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>randomsubsetting: Ignore endpoints that contain no addresses. Previously, this could cause the policy to panic while computing hashes. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9259">#9259</a>) <ul> <li>Special Thanks: <a href="https://github.com/fallintoplace"><code>@fallintoplace</code></a></li> </ul> </li> <li>stats/otel: Ensure method names are populated in trace spans when metrics are disabled. Previously, running with tracing enabled and metrics disabled resulted in server trace spans lacking the RPC method name (recording only "Recv."). (<a href="https://redirect.github.com/grpc/grpc-go/issues/9262">#9262</a>)</li> <li>transport: Return <code>io.ErrUnexpectedEOF</code> when EOF is encountered after partial header or message body reads. Previously, partial reads could return a plain <code>io.EOF</code>, failing to distinguish truncated data from a clean end of stream. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9204">#9204</a>) <ul> <li>Special Thanks: <a href="https://github.com/buger"><code>@buger</code></a></li> </ul> </li> <li>transport: Validate metadata supplied by balancers (in <code>PickResult.Metadata</code>) and resolver addresses, failing the RPC with status code <code>Internal</code> if invalid keys or values are found. Previously, invalid metadata from these sources was sent to the server in outgoing HTTP/2 requests. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9203">#9203</a>) <ul> <li>Special Thanks: <a href="https://github.com/buger"><code>@buger</code></a></li> </ul> </li> <li>xds: Fix a rare corner case that could prevent a cluster from being removed when it is no longer in use. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9140">#9140</a>)</li> <li>xds: Fix panic during route matching for routes containing header matchers with empty <code>exact_match</code> strings. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9223">#9223</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>xds: Reject routes containing header matchers with empty <code>prefix_match</code> or <code>suffix_match</code> strings. Previously, this caused a panic during route matching. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9223">#9223</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>xds: Fix EDS drop policies being applied at a much lower rate than configured due to an integer overflow. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9257">#9257</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>xds: Reject EDS resources containing drop policies with unsupported denominators. Previously, such resources caused the client to panic when calculating drop rates. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9218">#9218</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>xds/rbac: Reject RBAC configurations containing nested <code>Principal</code> or <code>Permission</code> rules with <code>:scheme</code> or <code>grpc-</code> prefixed header matchers. Previously, such configurations could cause DENY policies to fail open. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9258">#9258</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>xds/rbac: Rewrite <code>host</code> header matchers to <code>:authority</code> in nested <code>Principal</code> and <code>Permission</code> rules. Previously, this rewrite only applied to top-level rules, causing nested <code>host</code> matchers to never match incoming requests and DENY policies to fail open. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9258">#9258</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> <li>xds/rbac: Reject <code>CidrRanges</code> with an unset prefix length. Previously, an omitted <code>prefix_len</code> field caused a panic during RBAC configuration parsing. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9250">#9250</a>) <ul> <li>Special Thanks: <a href="https://github.com/nvxbug"><code>@nvxbug</code></a></li> </ul> </li> </ul> <h1>Performance Improvements</h1> <ul> <li>transport: Avoid a heap allocation when flushing shared write buffers. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9233">#9233</a>) <ul> <li>Special Thanks: <a href="https://github.com/zaidoon1"><code>@zaidoon1</code></a></li> </ul> </li> <li>credentials/alts: Support dynamic frame size negotiation and add the <code>GRPC_GO_EXPERIMENTAL_ALTS_MAX_FRAME_SIZE</code> environment variable (default 4KiB, max 512KiB) to configure the maximum ALTS record frame size. (<a href="https://redirect.github.com/grpc/grpc-go/issues/9268">#9268</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc-go/commit/e84aa5ab15d1d2b29d54f838312ad490cb7551a8"><code>e84aa5a</code></a> Change version to 1.84.0 (<a href="https://redirect.github.com/grpc/grpc-go/issues/9324">#9324</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/c5ae88df420fcc0c24c6267bdf8cdd3b2711ba2c"><code>c5ae88d</code></a> Cherrypick <a href="https://redirect.github.com/grpc/grpc-go/issues/9204">#9204</a> and <a href="https://redirect.github.com/grpc/grpc-go/issues/9321">#9321</a> to v1.84.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9407">#9407</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/a592f6a8d26237b5476eb18b08ee1203393e27b9"><code>a592f6a</code></a> Cherrypick <a href="https://redirect.github.com/grpc/grpc-go/issues/9351">#9351</a> and <a href="https://redirect.github.com/grpc/grpc-go/issues/9404">#9404</a> to v1.84.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9408">#9408</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/d5a41119e0e3189ea913cf839586ce34a44f1a3f"><code>d5a4111</code></a> cherry-pick <a href="https://redirect.github.com/grpc/grpc-go/issues/9365">#9365</a> to v1.84.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9370">#9370</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/89d55e04f9f3213a2de543e00df15f1468ea9d9a"><code>89d55e0</code></a> cherry-pick <a href="https://redirect.github.com/grpc/grpc-go/issues/9346">#9346</a> to v1.84.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9372">#9372</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/8a9f866584e36f0adb8c60a779581ab4bb486d1b"><code>8a9f866</code></a> Cherry-pick <a href="https://redirect.github.com/grpc/grpc-go/issues/9332">#9332</a> to v1.84.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9338">#9338</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/f8b54e7c913347537e168f5219d8f6cbaeb8860b"><code>f8b54e7</code></a> Cherry-pick <a href="https://redirect.github.com/grpc/grpc-go/issues/9331">#9331</a> to v1.84.x (<a href="https://redirect.github.com/grpc/grpc-go/issues/9334">#9334</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/30ce1d594fa9d7b86ff9d3d7dd7873ef0c161acf"><code>30ce1d5</code></a> xds: support injecting bootstrap and server config into HTTP filter config pa...</li> <li><a href="https://github.com/grpc/grpc-go/commit/54c743e4e9829208f264e092160d2b0768a01bf2"><code>54c743e</code></a> extproc : wait for async RPC to complete in test (<a href="https://redirect.github.com/grpc/grpc-go/issues/9311">#9311</a>)</li> <li><a href="https://github.com/grpc/grpc-go/commit/538bb2f7af6e36be46ec1d2ae90f65b972f14083"><code>538bb2f</code></a> endpointsharding: decouple locking, and simplify ChildState API (<a href="https://redirect.github.com/grpc/grpc-go/issues/9290">#9290</a>)</li> <li>Additional commits viewable in <a href="https://github.com/grpc/grpc-go/compare/v1.83.2...v1.84.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
96e97a4061 |
chore: bump alpine from 31b6477 to 294b683 in /scripts (#29707)
Bumps alpine from `31b6477` to `294b683`. [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
06d421fbcf |
chore: vendor the @shadcn/react message-scroller source (#29473)
The agent chat transcript scrolls through `@shadcn/react`'s MessageScroller, and its scroll defects have to be fixed in the package. The package ships only minified dist, so the fix would be an unreviewable patch against minified code, and 0.3.1 still has the identical defect, so an upgrade buys nothing. This vendors the readable upstream source (`@shadcn/react@0.3.0`, commit `b1c580c63`, MIT) under `site/src/vendor/` and drops the npm dependency. It is a pure move with no behavior change; the fix itself follows in #29354. Each file header pins the upstream tree, and any deviation from upstream must be marked `LOCAL CHANGE`. |
||
|
|
60cc826f2b | feat: sign forwarded MCP identity headers (#29669) | ||
|
|
47d3e1c52b |
feat(site/src/components): animate overlays from their trigger (#29620)
> 🤖 This PR was written by Coder Agents on behalf of Jake Howell. Extremely subtle... overlays previously zoomed from their own centre, so a menu opened from a corner appeared to grow out of nowhere instead of out of its trigger. Radix already publishes the trigger-relative origin as `--radix-popper-transform-origin` on the popper wrapper, so the fix is to read it: | Component | Change | |---|---| | `Popover`, `Select`, `Tooltip` | `origin-(--radix-popper-transform-origin)` | | `DropdownMenu`, `ContextMenu` | same, via the shared `menuContentClass` | | `MultiSelectCombobox` | `origin-top` (not popper-based; anchored directly below its input) | | Old | New | | --- | --- | | <img width="300" alt="preview--old" src="https://github.com/user-attachments/assets/84410733-5de0-452e-bdb1-af4ca44a066e" /> | <img width="300" alt="preview--new" src="https://github.com/user-attachments/assets/d36bd3df-37e9-4eed-b477-870135e9ef6f" /> |
||
|
|
31842bdbc5 |
chore: (helm) expose deployment strategy parameter (#29652)
closes #28797 adds support for specifying a custom value for `coder.strategy` which gets applied to the `Deployment` object. tests included. pre: ``` ➜ helm-deployment-pzxt git:(helm-deployment-pzxt) helm template coder coder-v2/coder --set coder.image.tag=v2.37.2 | grep -A5 strategy ➜ helm-deployment-pzxt git:(helm-deployment-pzxt) ➜ helm-deployment-pzxt git:(helm-deployment-pzxt) helm template coder helm/coder --set coder.image.tag=v2.37.2 | grep -A5 strategy ➜ helm-deployment-pzxt git:(helm-deployment-pzxt) ``` post: ``` ➜ helm-deployment-pzxt git:(helm-deployment-pzxt) helm template coder helm/coder --set coder.image.tag=v2.37.2 --set coder.strategy.type=RollingUpdate,coder.strategy.rollingUpdate.maxSurge=50%,coder.strategy.rollingUpdate.maxUnavailable=3 | grep -A5 strategy strategy: rollingUpdate: maxSurge: 50% maxUnavailable: 3 type: RollingUpdate template: ``` |
||
|
|
efd8e8ca12 |
fix(coderd): require read and update chat permissions for delegated chat owners (#29684)
`POST /api/v2/chats` with `owner_id` (#29581) checks that the delegated owner holds `chat:create` before creating the chat under the owner's context. Creation also inserts the first message (`chat:update`) and reads the chat back (`chat:read`) inside the same transaction, so an owner whose custom organization role grants only `chat:create` passed the preflight and then failed inside the transaction with a generic 403 instead of the intended 400 `Chat owner does not have permission to use chats.` The transaction rolls back, so no chat is left behind; only the status code and message were wrong. The preflight now requires create, read, and update for the owner. Regular organization members hold all three through the member role, so this only changes the response for service accounts and custom roles with partial chat grants. Found by Codex on the 2.37 backport (#29683), which carries this same commit. The code is identical on main. ## Validation - `TestPostChats_OwnerID/OwnerWithCreateOnlyChatPermission`: red on the unfixed head (403 instead of 400), green with the fix. - `go test ./coderd/ -run 'TestPostChats|TestPatchChat' -count=1`: pass. - Pre-commit hook (gen, fmt, lint, slim build) passed on this commit. > Xum opened this PR on behalf of @ibetitsmike. |
||
|
|
e35cbe2a7f |
fix(coderd/x/chatd): stream compaction summaries (#28886)
Chats could get permanently stuck once their context crossed the compaction threshold on adaptive-thinking Claude models: every compaction attempt failed with `compaction produced an empty summary`, and both automatic and manual compaction take the same path, so the chat could never recover. ## Problem `compactionSummaryCall` deliberately set `MaxOutputTokens = nil` because the summary request was non-streaming and the Anthropic SDK rejects non-streaming requests whose `max_tokens` implies a completion longer than ten minutes. But a nil cap makes fantasy's Anthropic provider silently default to 4096 output tokens, and adaptive-thinking Claude models can spend that entire budget on a thinking block, leaving zero summary text. ## Fix - Stream the compaction summary request. Streaming lifts the Anthropic SDK's non-streaming duration restriction, which was the only reason the cap was nil'd. - Keep the resolved output cap (32k default) on the summary call instead of nil'ing it. - When the summary comes back empty with truncation evidence (length finish reason, or reasoning with no text), fail with `compaction summary was truncated at the output token cap` instead of the generic empty-summary error, so the next occurrence is attributable at a glance. Unit tests cover text-block joining and the truncation classification; the compaction e2e fixtures now serve streamed summaries and assert the summary request streams with `max_tokens: 32000`. Dogfood UAT on a deployment built from this branch verified manual compaction with Claude Opus 5 (adaptive thinking, twice, with reload persistence) and an OpenAI regression chat. > 🤖 Opened by [Xum](https://mux.coder.com) on behalf of @ibetitsmike. |
||
|
|
8475a1defb |
refactor(coderd): enforce workspace template authz in singleWorkspaceData (#29665)
Part of the lite `codersdk.Workspace` work ([GRU-82](https://linear.app/codercom/issue/GRU-82), [RFC](https://app.notion.com/p/coderhq/Lite-Workspace-API-Requests-3aad579be5928060b5e7cc65c539717f)). `api.workspaceData` omits templates the actor cannot read and leaves each caller to check `len(data.templates) == 0` and fail the request itself. Now that `workspaceData` receives the `wsrelated.Config`, it knows whether the template was requested, so the authorization check can live closer to the data. This adds `singleWorkspaceData`, a thin wrapper for single-workspace fetches that returns `errWorkspaceTemplateUnauthorized` when the template was requested but is absent (i.e. unreadable). The five single-workspace callers route through it and map that error to the response their endpoint requires: - get workspace by ID → `403` - get workspace by owner/name → `404` (preserves existence concealment) - create/put workspace → `403` - watch workspace (SSE) → forbidden error event The batch `workspaceData` keeps its RBAC-filtering behavior so the **list** endpoint can still skip workspaces whose template the actor cannot read, rather than failing the whole request. Field selection (`Config`) and authorization policy are kept separate: the strict check is a property of the single-workspace wrapper, not of `All()`. <details> <summary>Design note</summary> The check tests membership by the workspace's `TemplateID` rather than only `len(templates) == 0`, and only real query failures (not RBAC omissions) propagate as generic errors, so a genuine DB error is never mistaken for an authorization denial. </details> ### Testing - New `TestSingleWorkspaceData` (mocked `database.Store`): template readable, template requested-but-unauthorized (sentinel), template not requested (no error), and a real query error (not the sentinel). - Existing `TestWorkspace`, `TestWorkspaceByOwnerAndName`, `TestWorkspaceWatcher`, and `TestWorkspaceIncludeRelated` pass unchanged. --- *Generated by Coder Agents on behalf of @spikecurtis.* |
||
|
|
af0ef00f91 |
feat: add owner_id to CreateChatRequest to create chats for another user (#29581)
Owners and owner-level service accounts can now start a Coder Agents
chat on behalf of another user by setting `owner_id` on `POST
/api/v2/chats`. The field is optional and defaults to the caller, so
existing clients are unaffected. A delegated owner must be an active,
non-system member of the requested organization; anything else returns
400 `Chat owner must be an active member of the organization.` once the
caller has passed the authorization gates below.
A chat runs entirely with its owner's credentials (synthetic API key,
workspace access, OIDC and provider tokens), so creating one for someone
else is acting as that user. On top of org-scoped `chat:create` for the
owner, the caller must hold the authority to create API keys for that
user, which is what the token endpoint demands to mint their session.
Org admins therefore cannot use it; site owners and owner-role service
accounts can. For the same reason the workspace binding, model config,
and MCP server IDs are validated as the owner rather than the caller,
and the owner must themselves hold `chat:create` (organization service
accounts do not). The initial user message is attributed to the caller
through `chatd.CreateOptions.CreatedBy`.
An earlier revision of this PR exposed the same behavior as `POST
/api/v2/users/{user}/chats`; that route and
`codersdk.Client.CreateUserChat` were removed in `62a8be3dd32` in favor
of the request field. An explicit zero `owner_id` is rejected with 400
rather than silently defaulting to the caller. Coverage lives in
`TestPostChats_OwnerID`.
<details>
<summary>Review record (path-based revision, gates unchanged)</summary>
- Two-axis code review (Standards, Spec) plus a simplicity audit ran as
Xum sub-agents on `1f3189898f0`. The Spec axis found the workspace
binding was authorized as the caller, fixed in `363d45281d8` with
red-green coverage in `WorkspaceNotAccessibleToOwner`. The additional
API-key gate and the `CreatedBy` attribution go beyond the workspaces
pattern and were kept deliberately for the reasons above.
- Codex review on `363d45281d8`: one P2, suspended, dormant, or system
users could be targeted and would get a chat that can never run because
AI Bridge refuses to authorize them. Fixed in `c065437e359` with
`OwnerSuspended` (red on the old head); thread replied to and resolved.
- Codex review on `c065437e359`: one P2, an explicit or
personal-override model config the caller can read but the owner cannot
was accepted and chatd would silently fall back to the default model at
run time. Fixed in `aa88b608182` by resolving the model config and MCP
server IDs under the owner's context, with
`ModelConfigNotAccessibleToOwner` (red on the old head); thread replied
to and resolved.
- Codex review on `aa88b608182`: one P2, an organization service account
(which deliberately holds no chat permissions) could be targeted because
the chat permission check ran as the caller. Fixed in `a6fe8075c30` by
also requiring the owner subject to hold `chat:create`, with
`OwnerWithoutChatPermission` (red on the old head); thread replied to
and resolved.
- Codex review on `a6fe8075c30`: one P2, the active/non-system check was
skipped when the caller could not read the owner's user object. Fixed in
`0dd8bb4dd44` by moving the check behind the authorization gates with a
system-restricted lookup; thread replied to and resolved. In
`62a8be3dd32` that lookup became a single `OrganizationMembers` query,
which also covers membership and excludes system and deleted users.
- Codex review on `62a8be3dd32` (the `owner_id` revision): two P2s. An
explicit zero `owner_id` was treated as omitted and created the chat for
the caller; fixed in `f54b4f33d36` with a 400 and `OwnerIDNil` (red on
the old head). Creation and the read-back still ran as the caller while
the preflight ran as the owner; fixed in the same commit by passing
`ownerCtx` to `CreateChat`, `GetChatByID`, title generation, and the
file-metadata fetch. That second scenario is unreachable today (only the
built-in `owner` role holds `api_key:create` for others, and site-wide
custom roles are refused by both the API and dbauthz), so it has no
dedicated red test. Both threads replied to and resolved.
</details>
<details>
<summary>Remote UAT record (path-based revision)</summary>
Remote UAT on dogfood (chat `d7442df3-693f-4403-805f-2de52f7bdbed`, Xum
sub-agent as critical runner) tested head `21ed6b389cc`, the last
path-based revision. Licensed dev server, real Haiku 4.5 model, 77
logged API requests, 23 inspected screenshots. Endorsed verdict:
**PASS**. Site owner creates a chat for member X: X sees it, gets real
answers to the admin prompt and to follow-ups, and state survives reload
and mid-response refresh. The creating admin gets `403 Only the chat
owner may send messages.` and a read-only view; an unrelated member gets
404. Org admin, member, user-admin, and template-admin callers get 403;
owner-role service account 201. Suspended, dormant, and service-account
targets 400; owner-inaccessible workspace, model config, or MCP server
400; 300 KiB body 413. The `owner_id` revision changes only how the
owner is supplied and the non-member response (400 instead of 404); the
authorization and eligibility gates it exercised are unchanged and
covered by `TestPostChats_OwnerID`.
Non-blocking findings for the author's judgment, none of them
regressions of this PR:
1. X's UI shows no author on the admin-written first message and offers
X "Edit" on it; `created_by` carries the admin but the frontend does not
surface it.
2. A site owner who is not a member of the organization can still create
a chat for its members (201), while a self-owned `POST /chats` returns
403 for the same organization; same asymmetry as `postUserWorkspaces`.
3. The creating admin can archive, rename, and interrupt X's chat
although it cannot message it (pre-existing chat authz).
4. Owner-inaccessible model config or MCP server is reported as "not
found or disabled" with no hint that the owner, not the caller, lacks
access.
5. Dormant (never logged in) targets are refused because AI Bridge
rejects non-active users; a new hire cannot be given a chat until first
login.
6. The endpoint docs list only 201 and 413.
</details>
> Xum (an AI agent) acted on behalf of @ibetitsmike for this PR.
|
||
|
|
cd2481615d |
fix(coderd/x/chatd): clarify chat delegation ownership (#29041)
The delegation guidance encouraged parallel activity without defining ownership between the parent and child, and corrections default to queued delivery, so a parent could keep working against an assignment the child had not received. Give each delegated task one owner. The parent continues independent work, waits with wait_agent when its next step depends on the child's result, and treats the report's findings as read context. Corrections and handoffs interrupt; a handoff is acknowledged only by the child's response through wait_agent. Agent selection stays in the spawn description instead of a second copy in planning guidance. Wording only; tool arguments and execution behavior are unchanged. Refs CODAGT-1079 |
||
|
|
297a55051b |
fix: make Terraform fixture generation predictable (#29481)
`make gen` could regenerate every Terraform fixture during unrelated work because the installed CLI differed from `version.txt`, or because the provider-version check failed. `make gen` now compares the generator, fixture sources, provider lock, and mise’s Terraform pin against a committed record. Changed inputs trigger regeneration; a different installed executable or checkout timestamps do not. Terraform runs in a temporary directory, and outputs are copied back only after generation succeeds. Shared CI checks the record and conversion behavior without regenerating Terraform fixtures. Fixes CODAGT-1082 |
||
|
|
a970c6c92e |
fix: list one Unknown AI Gateway client for missing and literal values (#29635)
`ListAIBridgeClients` grouped by the raw `client` column while selecting `COALESCE(client, 'Unknown')`, so interceptions with no client and interceptions whose client is literally `Unknown` produced two identical `Unknown` entries in the client filter. Group by the coalesced value instead. ## Validation `go test ./enterprise/coderd -run '^TestAIBridgeListClients$'` (adds an interception with a literal `Unknown` client and expects a single entry), `make gen` with no drift (regenerates `queries.sql.go` and `querier.go`). Split out of #28964, where the spend page's client filter surfaced it. > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
988520477e |
feat!: remove the experimental chat API mounts after the transition window (#29548)
Remove the `/api/experimental` duplicates of the promoted chat API. #28496 double-mounted the chat, organization chat and MCP server, member model-override, AI provider key, and MCP OAuth2 disconnect routes under both prefixes for the one-release compatibility window decided in CODAGT-921; that window closed with v2.37.0, so these routes now answer only on `/api/v2`. The change also deletes what existed only for the dual mount: the `chatAPIPrefix` plumbing, the shared cross-prefix files rate limiter (`RateLimitByAPICompatibilityEndpoint`), the 410 tombstones for the legacy `chats/providers` and `chats/user-provider-configs` collections with their `ExperimentalClient` SDK methods, and the `/providers` and `/user-provider-configs` 404 reservations on `/api/v2`. Signed chat file download URLs now point at `/api/v2`. Routes that were never promoted stay on `/api/experimental`: the experiment-gated `chats/config/advisor` and `chats/config/computer-use-provider`, `chats/{chat}/stream/desktop`, `chats/{chat}/debug/runs`, and the MCP OAuth2 callback, whose path is pinned as a registered redirect URI with external providers. The frontend already calls `/api/v2` for every promoted route, so only `typesGenerated.ts` changes. Because the experimental mount no longer reserves the removed collection segments, requests such as `GET /api/experimental/chats/models` now fall into the `{chat}` wildcard and return 400 instead of 404; the experimental prefix carries no stability guarantee and the compatibility window is over, so no new reservations were added. `coderd/x/chatd/ARCHITECTURE.md` now describes the single `/api/v2` mount and the remaining experimental routes, and its endpoint headings use the `/api/v2` paths. Closes CODAGT-922 (https://linear.app/codercom/issue/CODAGT-922/remove-experimental-chats-api-paths-after-transition-window). Refs #28496. ## Delivery record - Remote dogfood UAT (Coder Agents chat https://dogfood.cdr.dev/agents/c016b549-201a-4eca-a50f-3c0b7c339db6): verdict PASS on |
||
|
|
30bf9027d2 | fix(site): keep template build error visible (#29670) | ||
|
|
5a13b22cc1 |
chore: bump cdr.dev/slog/v3 to v3.2.0 (#29600)
## What Bumps `cdr.dev/slog/v3` from `v3.1.0` to `v3.2.0`. ## Why `v3.2.0` adds the flight recorder (`Logger.FlightRecorder(size)` / `Logger.Flush(ctx)`), the shared primitive behind the connection-log RFC requirement that clients and agents buffer sub-threshold logs in memory and emit them on connection failure. Landing the version bump on its own unblocks the two independent consumers: - CLIENT-672: agent log buffering - CLI-4: CLI log buffering Keeping the bump as its own small PR lets those two consumers proceed and merge in any order. ## Changes - `go.mod` / `go.sum`: `cdr.dev/slog/v3 v3.1.0 -> v3.2.0`. No code changes; the new API is additive. slog release: https://github.com/coder/slog/releases/tag/v3.2.0 --- <sub>Opened by Coder Agents on behalf of @aqandrew.</sub> |
||
|
|
9a65e8f0e5 |
chore(docs): update ws-proxy-picker.png (#29651)
> 🤖 This PR was modified by Coder Agents on behalf of Jake Howell. Replaces `ws-proxy-picker.png` with a 896px preview of the current Workspace Proxies settings page (`UserSettingsPage/WorkspaceProxyPage/WorkspaceProxyView`), using the same `MockWorkspaceProxies` fixture data as its Storybook story. The old image showed the previous admin Deployment layout with a separate URL column, badge-style statuses, and full sidebar chrome. Image-only change; no docs text or paths were modified. Referenced once, from `docs/admin/networking/workspace-proxies.md` under "Selecting a proxy". | Old | New | |---|---| | <img width="448" alt="ws-proxy-picker (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/admin/networking/workspace-proxies/ws-proxy-picker.png" /> | <img width="448" alt="ws-proxy-picker (new)" src="https://raw.githubusercontent.com/coder/coder/refs/heads/jakehwll/docs-ws-proxy-picker/docs/images/admin/networking/workspace-proxies/ws-proxy-picker.png" /> | <details> <summary>Verification</summary> - Header text, "View docs" link, and the Proxy / Status / Latency columns match `WorkspaceProxyView.tsx`; URL-as-subtitle, dot-style status indicators, `N ms` / "Not available" latency, and the Errors / Warnings blocks match `WorkspaceProxyRow.tsx`. - Fixture data only (`dev.coder.com`, `*.fly.dev.coder.com`, `127.0.0.1:3001`), identical to the old image. No real deployment URLs or users. </details> |
||
|
|
113667470d |
chore(docs): update autostart.png and autostop.png (#29650)
> 🤖 This PR was modified by Coder Agents on behalf of Jake Howell. Replaces the autostart and autostop screenshots under `docs/images/workspaces/` with previews of the current workspace schedule form. The old images showed the previous MUI-based form (different toggle and input styling, Sunday-first day order). Image-only change; no docs text or paths were modified. Both are referenced from `docs/user-guides/workspace-scheduling.md`. | Old | New | |---|---| | <img width="448" alt="autostart (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/workspaces/autostart.png" /> | <img width="448" alt="autostart (new)" src="https://raw.githubusercontent.com/coder/coder/refs/heads/jakehwll/docs-workspaces-autostartstop/docs/images/workspaces/autostart.png" /> | | <img width="448" alt="autostop (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/workspaces/autostop.png" /> | <img width="448" alt="autostop (new)" src="https://raw.githubusercontent.com/coder/coder/refs/heads/jakehwll/docs-workspaces-autostartstop/docs/images/workspaces/autostop.png" /> | <details> <summary>Verification</summary> - Labels match `site/src/pages/WorkspaceSettingsPage/WorkspaceSchedulePage/WorkspaceScheduleForm.tsx`: "Enable Autostart", "Start time", "Timezone", "Days of Week" with Mon through Sun ordering, "Enable Autostop", "Time until shutdown (hours)", and the `ttlShutdownAt` helper text. - No user names, emails, or deployment URLs visible. </details> |
||
|
|
c1b3ee7895 |
fix: select an AI Gateway client only on an exact match (#29636)
`useClientFilterMenu` resolved the selected option by searching clients with `q: value` and taking the first result, so with no value selected (or a prefix that matches another client) the filter displayed a client that was never chosen. Require the first result to equal the value. Split out of #28964, where the spend page rendered the filter with no selection and showed the first client as selected. > Xum prepared this PR on behalf of @ibetitsmike. |
||
|
|
f69f545429 |
chore: clean up ChatProviderAPIKeysFromDeploymentValues (#29666)
Removes not needed `ChatProviderAPIKeysFromDeploymentValues` function. |
||
|
|
f3cfd8bddc |
chore(docs): remove unused images (#29647)
> 🤖 This PR was modified by Coder Agents on behalf of Jake Howell.
Removes 73 files (72 PNGs and 1 MP4, about 12 MiB) under `docs/images/`
that nothing references anymore. Most are older screenshots superseded
when docs were reorganized and new images were added at new paths (for
example `guides/using-organizations/` vs the current
`admin/users/organizations/`), leaving the originals orphaned.
Pure deletion, no markdown or manifest changes. This covers every
unreferenced raster asset under `docs/images/`. 22 unreferenced SVGs
remain (`icons/*.svg`, `google-cloud.svg`, `oidc-sequence-diagram.svg`)
and are out of scope here; `icons/` is consumed via `manifest.json`
`icon_path` entries rather than markdown, so those warrant a separate
look.
<details>
<summary>Verification</summary>
- Searched the whole repo (not just `docs/`) for every deleted file by
full path, docs-relative path, and basename (case-insensitive): zero
references. All basename hits resolve to different, still-present files
that share a name at another path.
- `docs/manifest.json`, root `README.md`, `site/`, and `offlinedocs/`
were included in the search.
- GitHub code search across the `coder` org for links to the deleted
directories (this repo uses
`raw.githubusercontent.com/coder/coder/.../docs/images/...` URLs for
media, so external consumers are possible): no live consumers. The only
hits are a vendored docs snapshot in `coder/coder-k8s` under
`.mux/skills/coder-docs/references/`, which is stale by design.
- CI: `check-docs` (linkspector), `lint-docs`, and `offlinedocs` pass.
</details>
|
||
|
|
84f790bd32 |
chore(docs): new notifications images (#29649)
> 🤖 This PR was modified by Coder Agents on behalf of Jake Howell. Replaces the two notification preference screenshots under `docs/images/admin/monitoring/notifications/` with Figma-exported previews in the same 896px style as #29455 and #29648, reflecting the current UI. The old shots predated the Events / Settings / Troubleshooting tabs on the admin page and the AI Cost Control and Chat event groups, and the old user-preferences shot included a real user's name and email in the sidebar. Image-only change; no docs text or paths were modified. Both are referenced from `docs/admin/monitoring/notifications/index.md`. Files are 25-60% smaller. | Old | New | |---|---| | <img width="448" alt="notification-admin-prefs (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/admin/monitoring/notifications/notification-admin-prefs.png" /> | <img width="448" alt="notification-admin-prefs (new)" src="https://raw.githubusercontent.com/coder/coder/12b31d278358d2f0a6af1028792b72b366e8e1d4/docs/images/admin/monitoring/notifications/notification-admin-prefs.png" /> | | <img width="448" alt="user-notification-preferences (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/admin/monitoring/notifications/user-notification-preferences.png" /> | <img width="448" alt="user-notification-preferences (new)" src="https://raw.githubusercontent.com/coder/coder/12b31d278358d2f0a6af1028792b72b366e8e1d4/docs/images/admin/monitoring/notifications/user-notification-preferences.png" /> | <details> <summary>Verification</summary> - Page copy and tabs match `site/src/pages/DeploymentSettingsPage/NotificationsPage/NotificationsPage.tsx` and `site/src/pages/UserSettingsPage/NotificationsPage/NotificationsPage.tsx`. - Event groups and template names (AI Cost Control Admin Events, AI Cost Control Events, Chat Events, Missing AI Model Prices, User Approaching/Reached AI Budget Limit, AI Budget Limit Reached, AI Budget Warning) match the notification template migrations. - The user-preferences image still shows a per-template delivery method icon on the right, which the docs text above it refers to. - No user names, emails, or deployment URLs visible. </details> |
||
|
|
57e8fd14b2 |
chore(docs): new licensing images (#29648)
> 🤖 This PR was modified by Coder Agents on behalf of Jake Howell. Replaces the three screenshots under `docs/images/admin/licenses/` with Figma-exported previews in the same 896px style as #29455, reflecting the current Licenses UI. The old `licenses-screen.png` predated the Products / Add-ons license card (Coder Workspaces, Coder Agents, AI Governance). Image-only change; no docs text or paths were modified. Referenced from `docs/admin/licensing/index.md` and `docs/tutorials/faqs.md`. Files are 40-60% smaller and no longer carry EXIF metadata. | Old | New | |---|---| | <img width="448" alt="licenses-screen (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/admin/licenses/licenses-screen.png" /> | <img width="448" alt="licenses-screen (new)" src="https://raw.githubusercontent.com/coder/coder/1a18a0ee925d12cecfb1e2cee5e37b22602a3629/docs/images/admin/licenses/licenses-screen.png" /> | | <img width="448" alt="licenses-nolicense (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/admin/licenses/licenses-nolicense.png" /> | <img width="448" alt="licenses-nolicense (new)" src="https://raw.githubusercontent.com/coder/coder/1a18a0ee925d12cecfb1e2cee5e37b22602a3629/docs/images/admin/licenses/licenses-nolicense.png" /> | | <img width="448" alt="add-license-ui (old)" src="https://raw.githubusercontent.com/coder/coder/53ad29512def2e562f41fc17509508896980605e/docs/images/admin/licenses/add-license-ui.png" /> | <img width="448" alt="add-license-ui (new)" src="https://raw.githubusercontent.com/coder/coder/1a18a0ee925d12cecfb1e2cee5e37b22602a3629/docs/images/admin/licenses/add-license-ui.png" /> | <details> <summary>Verification</summary> - Every visible label in the new images maps to a current string in `site/src/pages/DeploymentSettingsPage/LicensesSettingsPage/` (`LicenseCard.tsx`, `LicensesSettingsPageView.tsx`, `AddNewLicensePageView.tsx`, `CoderWorkspacesProductCard.tsx`, `CoderAgentsProductCard.tsx`). - Mock license data only: license #26, 64/100 seats, valid August 27, 2024 to August 27, 2027. No license key, deployment ID, or email visible. - Dimensions 896x512 / 896x352 / 896x512, matching the `docs/images/screenshots/` convention from #29455. </details> |