Commit Graph
2263 Commits
Author SHA1 Message Date
Pamela Chia b6d8f2ae2d chore: remove tableQuickstart and realtimeButtonVariant experiments (#42388)
## Summary

Removes two concluded A/B experiments that didn't produce positive
results:
- **tableQuickstart**: Tested AI-powered table generation, template
selection, and assistant integration for new table creation
- **realtimeButtonVariant**: Tested hiding the realtime button or
replacing it with a triggers button

## Changes

- Delete `TableQuickstart/` folder with AI widget, templates widget, and
generation hooks
- Delete `useRealtimeExperiment` hook and remove variant-conditional
logic
- Delete `/api/ai/table-quickstart/generate-schemas` endpoint
- Remove telemetry event definitions for both experiments
- Remove local storage exposure tracking key
- Remove API endpoint from proxy whitelist
- Clean up eslint baseline references

## Testing

- [x] Tested locally - Table Editor renders correctly without experiment
widgets
- [x] TypeScript compiles without errors
- [x] No remaining references to removed experiment code

**Quick test:**
1. Navigate to Table Editor → New Tab shows only "Create a table" card
(no AI/Templates/Assistant variants)
2. Open table create panel → Realtime checkbox shows unconditionally
when realtime is enabled

## Linear

fixes GROWTH-609

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Removed Features**
* AI-powered table generation and quickstart assistance (templates, AI
widget, generation hook, templates data, and related utilities)
  * Quickstart templates widget and predefined table templates
  * Database triggers management interface
  * Realtime experiment gating and related experiment variants

* **API & Storage**
  * Hosted AI quickstart API endpoint removed
  * Local storage key for quickstart exposure tracking removed

* **Telemetry**
  * Quickstart- and realtime-experiment telemetry events removed

* **UI Changes**
  * Simplified realtime toggle control in the table editor
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-03 11:55:10 +08:00
Francesco Sansalvadore 6e2842dc86 chore(ui-patterns): reset command menu after selection (#42389) 2026-02-02 21:56:35 +01:00
Pamela Chia 30093962d4 feat(telemetry): dedupe experiment exposure events by PostHog session ID (#42386)
## Summary

Adds session-based deduplication for experiment exposure events.
Previously, exposure events used `useRef` which reset on page refresh,
causing duplicate events. Now events dedupe by PostHog session ID using
`sessionStorage`, firing once per session even across page refreshes.

## Changes

- Add `captureExperimentExposure()` method to `PostHogClient` with
session-based dedupe
- Add `getSessionId()` method to retrieve PostHog session ID
- Create `useTrackExperimentExposure` hook for clean usage
- Migrate existing experiments to new hook:
  - RLS option experiment (`/new/[slug]`)
  - Realtime button experiment
  - Table create generate policies experiment

## How it works

1. Event triggered → if PostHog not ready, queue to `pendingExposures[]`
2. PostHog `loaded` → flush queue through `fireExposureIfNew()`
3. `fireExposureIfNew()` checks
`sessionStorage['ph_exposed:{experimentId}']`
4. If value matches current session ID → skip (already fired)
5. If differs or missing → fire event, store session ID

## Testing

- [x] Tested locally and on preview - verified on project creation page
- [x] PostHog events sent successfully (200 responses)
- [x] Session deduplication working (no duplicate events on page refresh
or org switch)
- [x] Lint passes with 0 errors

**Quick test:**
1. Go to `/new/<org-slug>` project creation page
2. Check `sessionStorage` for `ph_exposed:project_creation_rls_option`
key
3. Refresh page - event should not fire again (same session ID)

## Linear

Resolves GROWTH-608

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* More reliable experiment exposure reporting with session-aware
deduplication, queued delivery, and consent respect to ensure events are
recorded when available.
* **Bug Fixes**
* Prevents duplicate exposure events within a session and avoids firing
exposures without a valid session.
* **Refactor**
* Consolidated disparate exposure-tracking logic into a unified
hook-based approach, simplifying tracking across the app.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-02 22:01:34 +08:00
Jordi Enric c9c827b598 feat: add axiom log drain ANL-1184 (#41115)
- finished the axiom log drain started in #40209 

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Added Axiom as a new log drain destination for telemetry data
collection
  * Added Amazon S3 as a new log drain destination for log storage
* Extended log drain configuration form with fields for S3 bucket
credentials and Axiom API details
  * Added documentation for setting up Axiom log drain integration

* **Documentation**
* Added Axiom log drain setup guides with dataset creation and
configuration steps

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-02 10:46:50 +00:00
f17f049e5e feat(log drains): add s3 form FE-2101 (#41031)
- adds s3 log drain form
- fixes issue tabbing over inputs


to test you can create an s3 bucket in a aws account, create some
credentials and try it, however I've tested it already and the logs
reach S3 just fine.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added Amazon S3 as a new log drain destination with configuration for
bucket, region, access credentials, and batch timeout settings.

* **Documentation**
* Updated guide documentation to include the new S3 destination
alongside existing options and standardized Datadog terminology.

* **Improvements**
* Simplified error message rendering in form layouts for improved
performance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ali Waseem <waseema393@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-02 09:34:23 +01:00
0760733a40 Project create security section updates (#42021)
<img width="1196" height="427" alt="image"
src="https://github.com/user-attachments/assets/6784b5e9-99c8-4fc9-b9f5-49672ba6e768"
/>

This reworks the security section within our project creation form to
expose two options.

1/ Enable or disable Data API which is essentially the same as we had
previously, just reframed
2/ Enable auto RLS which creates an event trigger that enables RLS on
all tables created via public schema. This is the same as what we do via
the RLS banner in authentication pages.

Note that this also removes the option to disable Data API on public
schema and move to dedicated schema. The user can still do this post
project creation . Assumption is this is rarely changed on project
creation and adds complexity.

To test:
1. Create a new project
2. Enable Data API and enable RLS setting
3. After project creation, go to triggers -> event tab -> notice enable
rls trigger
4. Create project and disable Data API
5. After project creation , go to settings/api and make sure data api is
disabled

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added an optional automatic Row-Level Security (RLS) event trigger
option in project creation (toggleable via experiment).

* **Improvements**
* Security panel simplified to checkbox-based controls for Data API and
RLS.
* Project creation form now includes the enableRlsEventTrigger flag and
applies related setup when enabled.
* Telemetry records RLS experiment exposure, variant, and whether the
RLS trigger was enabled.
  * Free-project messaging updated to consider user limits.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
Co-authored-by: Sean Oliver <882952+seanoliver@users.noreply.github.com>
2026-02-02 15:49:35 +10:00
Illia BasalaievandIllia Basalaiev 18345e5c59 chore: fix db extensions studio redirect links (#42333)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Bug fix

## What is the current behavior?

- database webhook redirects to 404
- index and performance advisor display "project not found" banner
before redirect

## Additional context
<img width="852" height="376" alt="CleanShot 2026-01-31 at 18 43 22@2x"
src="https://github.com/user-attachments/assets/62f80f40-6d0c-4e1a-8e4f-71ec472a723d"
/>
<img width="2106" height="1128" alt="CleanShot 2026-01-31 at 18 44
37@2x"
src="https://github.com/user-attachments/assets/18d39a85-5148-49de-93c9-8c25819bcf0e"
/>
<img width="2000" height="1061"
src="https://github.com/user-attachments/assets/74011d16-caac-4b03-a747-9c9d8ecaf558"
/>

Co-authored-by: Illia Basalaiev <illiab@IMB3.local>
2026-01-31 15:24:55 +01:00
Alaister Young 53d345d1f8 [FE-2371] chore(studio): swap useMemo for useLayoutEffect in useRegisterPage (#42308)
This is largely to avoid setting state inside a `useMemo()`.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Optimized CommandMenu page registration timing and dependency handling
to improve synchronization with DOM updates.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-01-31 16:44:54 +08:00
Matt Rossman 0ef949849d docs(mcp): installation instructions for Kiro IDE (#42121)
- Adds Kiro to the list of MCP Clients in [MCP
docs](https://supabase.com/docs/guides/getting-started/mcp) / studio
Connect dialog with deep links to install the Supabase
[powers](https://kiro.dev/powers/)
- Makes description above deep link configurable via
`deepLinkDescription` (so Kiro's text can clarify that this installs the
power)
- Adds options to `generateDeepLink` so deep link can be different for
local/hosted platforms (so we can provide different deep links for the
local/hosted Kiro powers)

See MCP docs in preview:

https://docs-git-mattrossman-ai-301-kiro-installation-docs-supabase.vercel.app/docs/guides/getting-started/mcp

<img width="1756" height="1096" alt="CleanShot 2026-01-23 at 17 03
43@2x"
src="https://github.com/user-attachments/assets/dedc156d-6b86-4238-aa32-f7fda414d069"
/>


Resolves
[AI-301](https://linear.app/supabase/issue/AI-301/kiro-installation-docs)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Added support for Kiro MCP client with platform-aware configuration
handling
* Enhanced MCP configuration display to show platform-specific deep link
descriptions
  * Improved config file rendering with better visual presentation

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-01-30 19:17:31 -05:00
Charis 9aced557ed fix(studio): copy schema behavior on safari (#42293)
Bug fix

## What is the current behavior?

The clipboard copy operation for table schema would show the success
toast before the copy actually completed.

## What is the new behavior?

Move the toast showing to the callback so it appears only after the copy
finishes

## Summary

* **Bug Fixes**
* Clipboard success confirmation now appears reliably after the copy
completes.

* **New Features**
* Copied table schemas are automatically formatted for improved
readability.

* **Improvements**
  * Enhanced clipboard behavior for better reliability across browsers.
2026-01-30 14:14:04 -05:00
Jordi Enric 168c084f4e feat(o11y): overview page (#42098)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Observability Dashboard: unified overview for service health and
database infrastructure with interactive charts and metric cards (CPU,
memory, disk I/O, connections, error rate, slow queries).
* Service Health Monitoring: per-service health cards and a
multi-service table with error/warning counts and drill-down links to
reports/logs.
* Interval Selector: new chart-interval dropdown with plan-aware
retention messaging.
* Menu & Reports: updated Observability menu with Overview entry and
Custom Reports management.
* **Documentation**
  * Added a footer link to troubleshooting guides.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-01-30 14:00:01 +00:00
Joshen Lim ba5538576b chore(studio): Update support form status page button to use incident query + make maintenance banner dismissible (#42248)
* Update support form status page button to use incident query + make maintenance banner dismissible

* Clean up

* Nit

* Attempt to fix tests

* Fix tests
2026-01-28 23:18:39 +08:00
Ali Waseem ea1b95d29b feature: batch and save operations for cell content updates (#42120)
* added initial queue operations and feature flag

* updated types

* added dirty state tracking on columns

* updated queue operations

* updated operation types and queue

* updated spacing

* removed on cancel

* updated to support saving

* updated to include eye details

* updated spacing for orders

* updated to support shortcuts

* added feature preview

* updated to unify queue methods

* added key generation

* used unique keys rather than random uuid

* updated based on code review

* operation key

* updated handle cancel

* updated remove operation button

* updated views for toast

* updated logic to support optimistic updates

* updated types

* code cleanup: remove LLM slop

* updated PR bug

* updated preview for logout

* updated based on code review

* removed use effect as it was causing problems

* fixed toast mounting away from sql editor

* removed toast for dedicated action bar

* cleaned up logic

* updated queue operations

* renamed method

* updated name for types

* updated comment

* fixed code rabbit solution

* added check for changed column

* added tests
2026-01-28 06:54:30 -07:00
Joshen Lim 2ce307130a Update API types and properly render replication lag in replica detail page (#42191)
* Update API types and properly render replication lag in replica detail page

* Forgot to add the api types
2026-01-28 15:34:01 +08:00
Sean Oliverandcoderabbitai[bot] dd0f8327ef fix(flags): set org/project context before flag fetch (#42123)
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-01-27 15:46:03 -08:00
fadymak 021af022ca chore: use utils for query escaping (#41581) 2026-01-27 15:44:42 +01:00
Ivan Vasilov 036740b5b5 chore: Bump vulnerable deps (#42182)
* Bump @modelcontextprotocol/sdk.

* Bump qs.

* Bump preact.

* Bump react-router.

* Bump @smithy/config-resolver.

* Bump undici.

* Bump devalue.

* Bump h3.

* Bump tar.

* Bump diff.

* Bump lodash.

* Dedupe @aws-sdk/credential-providers.
2026-01-27 10:29:05 +01:00
CharisandJoshen Lim 3fcc8b51a1 fix(studio): schema copy bug in safari (#42161)
* fix(studio): schema copy bug in safari

The schema could not be copied to clipboard in Safari because of the
known problem where Safari does not allow awaits to happen before
copyToClipboard. Fixed by passing the promise directly to
copyToClipboard.

* chore(studio): add eslint rule to catch async copyToClipboard

* Apply suggestion from @charislam

* Smol fix

* Clean

* Revert

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-01-27 15:05:14 +08:00
Pamela Chia f27a2d3028 feat(telemetry): track security settings on project creation (#42150)
* feat(telemetry): add security settings to project creation event

Add dataApiEnabled, useApiSchema, and useOrioleDb properties to
project_creation_simple_version_submitted event to track user
security and configuration choices during project creation.

* feat(studio): track security settings on project creation

Include dataApiEnabled, useApiSchema, and useOrioleDb in the
project_creation_simple_version_submitted telemetry event to capture
user's security and configuration choices.

* feat(telemetry): add security settings to confirm modal event

Include dataApiEnabled, useApiSchema, and useOrioleDb in the
project_creation_simple_version_confirm_modal_opened event for
consistency with the submitted event.

* refactor(telemetry): remove extra properties from confirm modal event

Remove dataApiEnabled, useApiSchema, and useOrioleDb from
project_creation_simple_version_confirm_modal_opened as these
are not needed for this event.
2026-01-26 13:49:45 +08:00
Danny White e96199081b feat(studio): show SQL snippet description (#42090)
* show browser title

* show both name and desc

* cleanup

* linebreak and format
2026-01-23 16:11:28 +08:00
kemal.earth ee25ba20dc feat(studio): replace auth overview charts (#41464)
* feat: replace usage metric cards with new charts

* feat: use new chart components for auth api and error codes

* style: some tweaks to the two tables

* fix: padding around empty states

* feat: smol adjustment

* fix: add aria label to go to logs tooltip

* fix: diff value

* fix: status code method font colour

* fix: actions onClick
2026-01-22 12:56:32 +00:00
f293036ec7 Add UX guardrails for edge functions RE unsaved and unimported files (#41921)
* Add UX guardrails for edge functions RE unsaved and unimported files

* useLatest on hasUnsavedChanges

* Remove checking of unimported files + add VS code like indicator for modified and unsaved files

* Nit

* Fix TS

* Fix

* nit

* Fixes

* Nit

* move hasUnsavedChanges on demand

* code rabbit nit

* code rabbit nit 2

* prettier

---------

Co-authored-by: Alaister Young <a@alaisteryoung.com>
Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com>
2026-01-22 13:31:28 +08:00
Danny WhiteandJoshen Lim 60dfcc00ea fix(studio): PageSectionSummary alignment (#42019)
* system

* nit

* docs and fixes

* more resilient component

* remove redundant text

* format

* nit

* PRettier

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-01-21 10:18:15 +08:00
Ignacio Dobronich 485dff74e3 chore: project scoped roles entitlement (#41587)
* chore: project access entitlment

* typegen
2026-01-20 22:00:11 +09:00
Danny White 6837e1b9f4 chore(design-system): align PageSectionAside to bottom of text content (#41629)
* docs fixes

* optical alignment

* fix container query
2026-01-20 18:00:35 +11:00
Joshen Lim c6b2fe6fee Popover ui component to use portal by default, remove all manual declaration of portal for PopoverContent in dashboard (#41818)
* Popover ui component to use portal by default, remove all manual declaration of portal for PopoverContent in dashboard

* Forgot to add ui changes lol

* Clean uop
2026-01-20 11:58:31 +08:00
Joshen LimandAlaister Young 3b7bba9a9a Add read replicas details page from database replication (#41784)
* Add read replicas details page from database replication

* Clean

* Address 🐰

---------

Co-authored-by: Alaister Young <a@alaisteryoung.com>
2026-01-19 13:44:41 +08:00
kemal.earth d19385a138 fix(studio): remove wrongly semicolon from export cli command (#41898)
* fix: remove semicolon from export cli

* fix: bump up contrast of string on light mode

* chore: update lightmode green to danny suggestion

* fix: actual suggestion
2026-01-15 09:28:54 +00:00
Prashant Sridharan 94bee5edeb Minor tweaks to the Convex compete page (#41913)
* Minor tweaks to the Convex compete page

* ci: Autofix updates from GitHub workflow
2026-01-15 10:30:19 +07:00
Joshen Lim a2b4e83fc6 Update NoticeBanner content for scheduled maintenance (#41888) 2026-01-14 13:34:03 +07:00
Charis 2c29910d12 Reapply "fix(studio): delegate check for expired token to gotrue" (#4… (#41867)
Reapply "fix(studio): delegate check for expired token to gotrue" (#41268)

This reverts commit 16cdd025b7.
2026-01-13 00:41:37 -05:00
Joshen Lim 5f7b021537 Persist sidebar behaviour on log out (#41866) 2026-01-13 12:39:35 +07:00
Sean Oliver 30adf96a0e Simplify realtime experiment to rely on PostHog targeting (#41210) 2026-01-12 20:58:00 -08:00
Ali Waseem 56eb4f01a6 feat: add OpenCode support to MCP clients (#41825)
* feat: add OpenCode support to MCP clients

- Add OpenCodeMcpConfig interface and type guard
- Add OpenCode to MCP_CLIENTS array with remote config
- Include OAuth authentication instructions
- Add OpenCode icons with correct naming convention
- Fix duplicate JSON config display by removing primaryInstructions

Resolves FE-2350

* added missing images
2026-01-12 18:26:52 -07:00
Kevin Grüneberg 87d6613620 chore: move cached egress under storage on pricing page (#41815) 2026-01-12 12:26:56 +07:00
Sean OliverandJoshen Lim 4e9b718cf3 Fix table quickstart experiment multi-bucket exposure issue (#41423)
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-01-09 15:53:12 -08:00
Pamela Chia 2346baf51c chore(telemetry): standardize event naming conventions (#41786)
* docs(telemetry-constants): add naming conventions and review note

* refactor(telemetry): rename event interfaces to include Event suffix

* refactor(telemetry): rename branch merge success event to completed

* refactor(telemetry): rename cron job deleted event to removed

* refactor(telemetry): rename events to submitted/completed

* docs: add previous event names to telemetry comments
2026-01-08 17:11:48 +07:00
kemal.earth 6c6d74fa21 fix(studio): modify area chart colours (#41496)
* fix: modify area chart colours

* feat: tones for dark and light

* chore: cleaning up

* chore: remove weird ai added debug fetches

* fix: suggestion from coderabbit

* chore: clean up

* feat: change from natural to bump on line charts

* fix: much better colour offset

* chore: remove comments

* feat: better dot implementation

* chore: remove unused props

* chore: remove pointless try catch
2026-01-08 10:06:51 +00:00
Francesco Sansalvadore 5bef19528b feat(studio): command search entities (#41554) 2026-01-08 14:13:36 +07:00
Sean Oliver f6cb934b36 fix(telemetry): decouple initial pageview from feature flag loading (#41748) 2026-01-07 08:51:25 -08:00
Charis 84be985a5b fix(ui-patterns): multiselect click behavior (#41726)
* fix(ui-patterns): multiselect click behavior

Multiselect clears only when it opens.

* fix(ui-patterns): multiselect placement

Multiselect placement needs to account for the remaining space so it
doesn't get cut off by the window edges.

* fixup! fix(ui-patterns): multiselect click behavior
2026-01-07 10:41:05 -05:00
Sean Oliver 0b04a7b303 fix: set PostHog ui_host for toolbar auth (#41478) 2026-01-07 05:39:20 -08:00
Riccardo BusettiandJoshen Lim 1238a19fe4 feat(etl): Expose more configuration parameters (#41758)
* feat(etl): Expose more configuration parameters

* Nit nudges

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-01-07 15:36:32 +08:00
Sean Oliver b49ad92db3 feat(telemetry): set gotrue_id as person property in frontend identify (#41750) 2026-01-06 16:38:30 -08:00
Saxon FletcherandAlaister Young 81098b2926 Event triggers (#41657)
* event triggers

* rename to event

* fixes

* fixes

* template

* use supabase roles instead

* useMemo array operations

* use blank as default

---------

Co-authored-by: Alaister Young <a@alaisteryoung.com>
2026-01-07 09:12:10 +10:00
Riccardo BusettiandJoshen Lim d795240928 feat(etl): Add integration with new validation endpoint (#41731)
* feat(etl): Add integration with new validation endpoint

* Fix

* Fix

* Fix

* Fix

* UI nudges + clean up + refactors

* Fix TS

* Sort issues

* Small improvement

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-01-07 00:32:08 +08:00
Alaister Young 867aac5308 chore: fix Realtime message limit (#41734)
Actual limit is 256 KB as per docs
2026-01-06 22:54:07 +08:00
kemal.earth 4c3b211076 feat(studio): add dashboard error events (#41431)
* feat: add telemetry event for dashboard error

* feat: add tracking event to alert error component

* fix: remove warning type

* feat: add error tracker for toasts too

* fix: remove message prop from event

* chore: remove unused dep in useeffect

* chore: further tidy up

* fix: useeffect separate component

* fix: use pams suggested verb
2026-01-06 13:54:11 +00:00
Riccardo Busetti c62cd07b86 feat(etl): Implement batch rollback (#41552) 2026-01-06 04:13:25 +01:00
Saxon Fletcher d2f4e808e5 Filter pattern refactor (#41545)
* filter refactor

* update tests

* prettier

* fix ts

* remove filter preview

* Filter bar in table editor behind flag (#41546)

filter bar in table editor behind flag

* fixes

* ts fix

* filter v1 refactor

* rename helpers

* unmount timeout

* fixes

* fix

* more
2026-01-06 08:04:28 +10:00