Commit Graph

4951 Commits

Author SHA1 Message Date
Cursor Agent
fb03797fbe Replace unsupported Probo codex categories
Marketplace review flagged Developer Tools and Automation as
unsupported n8n codex category values. Keep Development and use
Utility per review guidance.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-02 17:53:06 +02:00
Cursor Agent
b770e226a3 Remove unused requestDefaults from Probo node
The Probo node implements execute() directly, so n8n never applies
requestDefaults from the node description. Drop the dead block flagged
in marketplace review.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-02 17:49:21 +02:00
Cursor Agent
512fc714de Update Probo server URLs to us.probo.com and eu.probo.com
Replace the legacy console.getprobo.com hostnames in the n8n README
and credential default with the current regional Probo URLs.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-02 15:33:44 +00:00
Cursor Agent
b702e34137 Add README to published n8n package
The n8n marketplace review requires a README in packages/n8n-node.
Document installation, Probo API credentials, and workflow examples
so users can configure the community node without reading the source.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-02 15:00:57 +00:00
Cursor Agent
478e34b82f Add display names for resource-alias OAuth scopes
The OAuth token and consent UIs fall back to the raw scope string when
a label is missing from scopeLabels. Add read and manage labels for
v1:resource-alias so it matches other API scopes.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-02 16:31:32 +02:00
dependabot[bot]
ef87fa981d Bump the github-actions group with 8 updates
Bumps the github-actions group with 8 updates:

| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `6` | `7` |
| [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) | `9.2.1` | `9.3.0` |
| [docker/setup-compose-action](https://github.com/docker/setup-compose-action) | `2.2.0` | `2.3.0` |
| [azure/setup-helm](https://github.com/azure/setup-helm) | `5.0.0` | `5.0.1` |
| [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) | `4.1.0` | `4.1.1` |
| [actions/attest](https://github.com/actions/attest) | `4.1.0` | `4.1.1` |
| [github/codeql-action/upload-sarif](https://github.com/github/codeql-action) | `4.32.1` | `4.36.2` |
| [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog) | `3.95.5` | `3.95.7` |

Updates `actions/checkout` from 6 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

Updates `golangci/golangci-lint-action` from 9.2.1 to 9.3.0
- [Release notes](https://github.com/golangci/golangci-lint-action/releases)
- [Commits](82606bf257...ba0d7d2ec0)

Updates `docker/setup-compose-action` from 2.2.0 to 2.3.0
- [Release notes](https://github.com/docker/setup-compose-action/releases)
- [Commits](16feee727c...4eb059ff7f)

Updates `azure/setup-helm` from 5.0.0 to 5.0.1
- [Release notes](https://github.com/azure/setup-helm/releases)
- [Changelog](https://github.com/Azure/setup-helm/blob/main/CHANGELOG.md)
- [Commits](dda3372f75...9bc31f4ebc)

Updates `actions/attest-build-provenance` from 4.1.0 to 4.1.1
- [Release notes](https://github.com/actions/attest-build-provenance/releases)
- [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md)
- [Commits](a2bbfa2537...0f67c3f485)

Updates `actions/attest` from 4.1.0 to 4.1.1
- [Release notes](https://github.com/actions/attest/releases)
- [Changelog](https://github.com/actions/attest/blob/main/RELEASE.md)
- [Commits](59d89421af...a1948c3f04)

Updates `github/codeql-action/upload-sarif` from 4.32.1 to 4.36.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](6bc82e05fd...8aad20d150)

Updates `trufflesecurity/trufflehog` from 3.95.5 to 3.95.7
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](d411fff7b8...f446421baf)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: golangci/golangci-lint-action
  dependency-version: 9.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: docker/setup-compose-action
  dependency-version: 2.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: azure/setup-helm
  dependency-version: 5.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/attest-build-provenance
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/attest
  dependency-version: 4.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.36.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.95.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-02 16:30:32 +02:00
Cursor Agent
a0329a9696 Raise compliance report upload limit to 30MB
Third-party compliance report PDFs were rejected above 10MB in the
upload dialog. Increase the client-side Dropzone limit and enforce the
same cap on the backend file validator.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-07-02 16:20:51 +02:00
Sacha Al Himdani
2fb06d742e Fix compliance page treating any Slack connector as connected
The compliance page rendered a Slack connector as "Connected" whenever
any SLACK connector existed for the org — including one created for an
access review with no channel configured — and only offered Disconnect,
which deletes the shared connector row.

Distinguish channel-configured connections from unconfigured ones and
let users (re)connect in place to pick a channel without first
disconnecting, reusing the existing reconnect-with-union-scopes flow via
connector_id.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-01 18:04:51 +02:00
Sacha Al Himdani
a651d56c8c Refactor third parties frontend to page arborescence
Mirror the risks refactor (c78a713): colocate routes.ts, split the
detail layout query so each child route owns its Loader + Page, rename
tabs/*Tab to resource folders with *Page, move dialogs into
_components/, and extract ThirdPartyRow with its own fragment.

Remove outlet context data passing and deprecated
loaderFromQueryLoader. Delete the monolithic ThirdPartyGraph hook,
colocating each GraphQL operation with its consumer: the create
mutation in CreateThirdPartyDialog (now useMutation + useToast) and
the third-party list queries in ThirdPartiesCell and
ThirdPartiesMultiSelectField (now useQueryLoader + usePreloadedQuery).

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-01 17:43:45 +02:00
Sacha Al Himdani
1df4af4556 Add document webhook events
Add a resource-oriented set of webhook events for the document
lifecycle. Each event carries the document plus only the sub-resource
it concerns (version, signature or approval).

Events:
- document.created / updated / archived / unarchived / deleted
- document.version.created / updated / published / rejected / deleted
- document.version.signature.requested / signed / cancelled
- document.version.approval.requested / approved / rejected / voided

Wires the new types through the migration, Go enum, GraphQL schema,
CLI, n8n nodes and the console webhooks settings UI.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-01 17:13:59 +02:00
Cursor Agent
4cdf8b7913 Wrap Mermaid flowchart labels
Long Mermaid node labels rendered as a single constrained line, which
caused text to be clipped in risk assessment diagrams. Share a Mermaid
render configuration that enables flowchart label wrapping before layout
so nodes expand for multi-line labels.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Sacha Al Himdani <SachaProbo@users.noreply.github.com>
2026-07-01 14:18:55 +00:00
Sacha Al Himdani
7142757dd8 Add n8n trigger node for Probo webhooks
The n8n package could already manage webhook subscriptions through API
CRUD, but had no way to start a workflow when Probo emitted an event. A
user had to drop in the generic Webhook node, create a subscription by
hand, and verify the HMAC signature themselves.

Add a ProboTrigger node that owns the subscription lifecycle: it creates
the subscription on activation pointing at n8n's generated webhook URL,
re-checks and re-registers it if the URL drifts, and deletes it on
deactivation. The webhook handler recomputes the HMAC-SHA256 over the raw
request body and compares it constant-time against the delivered
signature, failing closed when the bytes or headers are absent.

Drop the MEETING_* event choices from the webhook create and update
operations and the CLI event list. They are not part of the backend
WebhookEventType enum, so selecting them only produced API rejections.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-07-01 16:06:08 +02:00
Cursor Agent
b61ccfdab8 Keep nested dropdown dismissal local
Radix can report a pointer down as outside the dialog while a
portaled select or dropdown is open. When the pointer coordinates
still fall within the dialog content bounds, keep the dialog open so
the child popup can close without discarding form state.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>
2026-07-01 13:38:42 +00:00
Ludovic Vielle
a3b65a6449 Release probod/v0.222.2
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-01 12:09:45 +02:00
Ludovic Vielle
e22aaa8b67 Omit empty fields from bootstrap config output
probod-bootstrap was writing empty strings and stub blocks such as
`esign: {}` into generated YAML. The post-marshal prune pass caused
part of that by stripping empty leaf strings while leaving empty
parent maps behind.

Drop the prune round-trip in WriteConfig and rely on struct-level
omitzero/omitempty tags plus custom IsZero() helpers on probodconfig.
Only include LLM providers when an API key is set, use a nil map for
extra API headers, and extend the dev-config Makefile recipe with the
local dev defaults already documented in .env.example.

Config loading is unchanged: omitted keys still decode to Go zero
values.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-01 11:47:43 +02:00
Ludovic Vielle
2be3e18437 Release probod-bootstrap/v0.4.1
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-01 00:07:10 +02:00
Ludovic Vielle
e27c4b99ff Release probod/v0.222.1
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-07-01 00:04:15 +02:00
Ludovic Vielle
35ea262691 Drop string defaults duplicated in probod.New()
probod-bootstrap was repeating probod.New() literals for string
env vars. Map those fields with getEnv only and leave int and bool
defaults in the builder. Runtime and generated yaml pick up probod
defaults when a variable is unset; dev and Helm still set env vars
explicitly where needed.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-06-30 23:49:54 +02:00
Bryan Frimin
3d5fac8682 Release helm/v0.10.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-06-30 19:41:27 +02:00
Bryan Frimin
125bac4a32 Release @probo/n8n-nodes-probo/v0.199.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-06-30 19:41:10 +02:00
Bryan Frimin
c7ca36b767 Release probod-bootstrap/v0.4.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-06-30 19:40:49 +02:00
Bryan Frimin
bc581eebf9 Release probod/v0.222.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-06-30 19:40:36 +02:00
Bryan Frimin
db3ff9e218 Release prb/v0.198.0
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-06-30 19:40:32 +02:00
Bryan Frimin
a07e655a05 Style
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-30 19:15:17 +02:00
Bryan Frimin
3f70047f72 Allow json output
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-30 19:07:03 +02:00
Bryan Frimin
c3bb19a780 Style
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-30 19:00:36 +02:00
Bryan Frimin
4e81061a1b Remove empty string value when generate cfg file
Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-30 18:48:27 +02:00
Bryan Frimin
5b92a7ba5a Allow ephemeral ports for loopback redirect URIs
Native OAuth clients such as Claude Code publish loopback redirect URIs
without a port (http://localhost/callback) and pick an ephemeral port at
request time, as described in RFC 8252 section 7.3. The authorize flow
matched the requested redirect URI against the registered set with an
exact string comparison, so http://localhost:3118/callback was rejected
with invalid_redirect_uri even for a trusted, allow-listed client.

Make OAuth2Client.IsRedirectURIAllowed the single source of truth for
redirect matching: it keeps exact matching and adds loopback-aware
matching that ignores the port when scheme, host, path, and query agree.
The redundant document-level check and its duplicate loopback helper in
the CIMD resolver are removed, so both the registered-client and CIMD
paths now rely on one matcher.

Also add a pkg/netx package for the loopback helper.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-30 18:36:47 +02:00
Cursor Agent
bbfd8a18b6 Expose signature document version ID
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Sacha Al Himdani <SachaProbo@users.noreply.github.com>
2026-06-30 12:58:04 +00:00
Sacha Al Himdani
b77ced364b Write longer third-party risk assessment vetting notes
Expand buildRiskAssessmentNotes to persist most of the extracted
assessment (classification, per-category risk breakdown, privacy and
data processing practices, AI governance, contractual clauses,
professional standing, and baseline failures) instead of only a short
summary. Fields already stored as structured columns on the third party
(certifications, data locations, document URLs) are omitted to avoid
duplication.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-06-30 14:44:07 +02:00
Ludovic Vielle
888fa4d63a Return conflict when removing a referenced person
Deleting a profile still referenced elsewhere (for example as an
asset owner) surfaced an internal error. PostgreSQL reports ON DELETE
RESTRICT blocks as SQLSTATE 23001, not 23503; map both in profile
delete and propagate ErrProfileInUse through removeUser as CONFLICT.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-06-30 14:11:46 +02:00
Cursor Agent
9e47aba2b6 Fix access review test whitespace
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:10 +02:00
Cursor Agent
79285d97df Remove access review framework controls
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:09 +02:00
Cursor Agent
9822b39ece Cast access review entry filters
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:09 +02:00
Cursor Agent
3880a09cea Use filtered entry count for campaign close
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:09 +02:00
Cursor Agent
9c09562918 Remove pending entry count field
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:09 +02:00
Cursor Agent
ba2a47d262 Use entries count for access review closure
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:08 +02:00
Cursor Agent
5bf8727076 Allow closing failed access reviews
Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
2026-06-30 14:11:08 +02:00
Bryan Frimin
bf255b198c Bound GraphQL request cost to prevent alias-flooding DoS
The GraphQL endpoint built its gqlgen server with bare handler.New and
no limits, so a single request with thousands of aliased resolver calls
was parsed, validated, executed, and marshalled in full. Under load this
let an unauthenticated client drive excessive CPU and memory use against
POST /api/connect/v1/graphql and the console and trust endpoints, which
share the same constructor (GHSA-prh2-g8pv-m7p9).

Add configurable guards in the shared gqlutils.NewHandler: a parser
token limit rejects oversized queries at lex time before any execution,
a fixed complexity limit caps field-selection count, an LRU query cache
avoids repeated parsing, and field suggestions are disabled. The limits
flow from a new APIConfig.GraphQL section through server and api config
into all three GraphQL handlers, with PROBOD_API_GRAPHQL_* env vars and
Helm values exposed for per-environment tuning.

Defaults are sized with generous headroom over real traffic: the parser
token limit (15000) and complexity limit (2000) sit far above the
largest legitimate frontend query yet well below the proof-of-concept
flood, so normal usage is unaffected while floods are rejected cheaply.

Signed-off-by: Bryan Frimin <bryan@probo.com>
2026-06-30 14:10:41 +02:00
Ludovic Vielle
9f9ace2cb8 Release probod/v0.221.0
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-06-30 13:08:37 +02:00
Ludovic Vielle
81bc8f7115 Release @probo/n8n-nodes-probo/v0.198.0
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-06-30 13:06:51 +02:00
Ludovic Vielle
f9489f6e53 Release probod-bootstrap/v0.3.0
Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-06-30 13:03:22 +02:00
Cursor Agent
972d68d937 Add latest published document version ID node
Co-authored-by: Sacha Al Himdani <sacha@probo.com>
Signed-off-by: Cursor Agent <cursoragent@cursor.com>
2026-06-30 09:26:05 +00:00
Sacha Al Himdani
0bf36f74db Fix n8n Organization Get Many failing on pending invitations
The Organization "Get Many" operation listed all viewer profiles without
filtering by state, then selected each profile's nested organization field.
Inactive profiles (e.g. unaccepted invitations) have no active membership,
so the per-org iam:organization:get authorization check failed and the whole
operation errored.

Filter profiles to ACTIVE state, matching the `prb org list` CLI behavior, so
only organizations the identity is an active member of are fetched.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-06-30 10:55:56 +02:00
Sacha Al Himdani
4982c67891 Fix npm deprecation warnings and minimize dependency overrides
Bump @n8n/node-cli to 0.37.1 (the `^0.24.1` range was trapping it at
0.24.x), which pulls an updated toolchain and clears the eslint@8,
glob@7, inflight, rimraf@3, @humanwhocodes/*, node-domexception and
uuid@10 deprecation warnings at the source.

Add a glob override (^13.0.6) so rimraf@6 no longer pulls the
deprecated glob@11, and trim the overrides list down to the three that
actually do work (uuid, js-yaml, glob); the rest were redundant or dead.
npm audit reports 0 vulnerabilities.

The upgraded @n8n/eslint-plugin-community-nodes rules flagged two
pre-existing issues in the Probo node, now fixed: handle
continueOnFail() in execute() and throw NodeOperationError instead of
raw Error.

The only remaining warning is @langchain/community, whose entire
package is deprecated upstream and is a hard dependency of
@n8n/ai-utilities.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-06-29 15:20:07 +02:00
Sacha Al Himdani
f7e93cdec5 Migrate Slack sender to kit worker
Replace the custom polling loop in the Slack sender with the
go.gearno.de/kit/worker framework, matching the email sending worker.
Add a processing_started_at column to slack_messages so claims are safe
under the worker's claim/process model, with stale recovery for crashed
in-flight sends. Rename sender.go to worker.go to match the kit worker
file naming convention.

Signed-off-by: Sacha Al Himdani <sacha@probo.com>
2026-06-29 14:40:24 +02:00
Ludovic Vielle
5cff72ce5b Add Parameter Store to bootstrap resolver
probod-bootstrap could only resolve aws:// Secrets Manager refs.
Add awsps:// for SSM Parameter Store (GetParameter with decryption)
and awssm:// as an explicit Secrets Manager prefix. Keep aws:// for
backward compatibility. Values are cached per run per backend.
Update Helm, .env.example, and probod-bootstrap changelog.

Signed-off-by: Ludovic Vielle <ludovic@probo.com>
2026-06-29 14:39:13 +02:00
Émile Ré
ba1c9fccfa Fix CardInset padding decoupling and logo a11y
Address PR review feedback identified by cubic:

- Re-key CardInset off the Card's resolved padding (shared via context)
  instead of size, so insets line up even when padding is decoupled from
  size via the padding prop; padding="none" becomes a no-op.
- Give ProboLogo a default aria-label so its role="img" SVG has an
  accessible name when used standalone; callers can still override it.
- Make the ProboLogo story render spread args so Storybook controls work.

Signed-off-by: Émile Ré <emile@probo.com>
2026-06-29 10:37:33 +02:00
Émile Ré
930c6bab45 Build compliance portal home page sections
Add the frameworks (Compliance), security commitments, trusted-by, and
recent updates sections to the home page, plus a site-wide "Powered by
Probo" footer. Frameworks, references, and updates are relay-driven; the
security commitments section uses placeholder POJO data until a backend
exists.

Keep generic primitives in the v2 kit (ProboLogo, a faint Text tone, and
a soft Card variant with padding="none") and place the product-specific
cards under the app's components folder, composing the base Card. Resolve
each framework's themed logo in the graph via Framework.themedLogoUrl,
mirroring the trust center logo resolver.

Signed-off-by: Émile Ré <emile@probo.com>
2026-06-29 09:15:50 +02:00
Émile Ré
6bcb7461be Address compliance-portal review feedback
Fix the valid issues raised in the scaffold review.

UI kit: the Button loading state now replaces only the leading icon
instead of dropping the label, Button consumes the `active` variant so
it no longer leaks onto the DOM, and every v2 skeleton sets aria-hidden
after the prop spread so a consumer cannot override it.

@probo/relay: guard the caller-supplied onCompleted/onError callbacks so
a throwing callback still settles the awaitable mutation promise instead
of leaving it pending.

compliance-portal: normalize external website hrefs and read hostname
via URL.hostname, add a localized catch-all not-found route, and widen
the .gitattributes glob so colocated __generated__ artifacts at any depth
are marked generated.

Docs: correct the forms guide (Base UI passes plain values, Zod v3
flatten API), spread the child fragment in the permissions example, and
drop references to v2 components that do not exist in the ui guide.

Signed-off-by: Émile Ré <emile@probo.com>
2026-06-28 18:40:08 +02:00