Skip to content

[pull] main from tinacms:main#269

Merged
pull[bot] merged 8 commits into
code:mainfrom
tinacms:main
Jul 6, 2026
Merged

[pull] main from tinacms:main#269
pull[bot] merged 8 commits into
code:mainfrom
tinacms:main

Conversation

@pull

@pull pull Bot commented Jul 6, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

kulesy and others added 8 commits July 6, 2026 00:41
…7122)

Closes #7120

**TL;DR** The install step now reflects the package manager's live
output on the spinner, instead of a static "Installing packages." that
gave no sign of progress.

**Pain:** `create-tina-app` ran `<pm> install` with stdout ignored, so
"Installing packages." showed no progress for the whole install (the
Astro starter pulls ~900 packages / 1.2 GB, minutes on a cold cache). An
animated spinner alone doesn't tell you the child is actually making
progress.

**Solution:** Pipe the package manager's output and show its latest line
on the spinner, e.g. `Installing packages, npm http fetch GET 200
.../vite`. npm is silent when piped so it gets `--loglevel=http`; pnpm
and yarn stream on their own. Both stdout and stderr are piped (npm logs
to stderr, pnpm/yarn to stdout), and `NO_COLOR` keeps the captured lines
plain. `--verbose` still streams the full output, and the #7031
stderr-tail error capture is unchanged.

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ath allowlist (#7143)

Closes #7142

**TL;DR** Unify folder-name validation with the document-filename and
backend `relativePath` allowlist so invalid folder names (e.g. spaces)
are rejected inline instead of failing on the backend with a generic
error.

**Pain:** The Create Folder modal only checked that a name was non-empty
unless a project set `ui.regexValidation.folderNameRegex`. A name like
`a b c d` passed that check, the `createFolder` mutation was sent, and
the backend rejected it with `Invalid path: relativePath contains
invalid characters`, surfaced as the unhelpful "There was an error
creating the folder. Please try again. If the problem continues, please
contact the developer" alert. Document filenames already validated the
same allowlist inline, so the two flows had drifted.

**Solution:** Add a single shared allowlist (`RELATIVE_PATH_REGEX` +
`RELATIVE_PATH_ALLOWED_CHARS_MESSAGE` + `isValidRelativePath`) to
`@tinacms/schema-tools`, and consume it from the resolver's
`validateRelativePath`, the create-document filename field, and the
Create Folder modal. The folder modal applies the allowlist as a
baseline and layers any project-level `folderNameRegex` on top, so the
UI can only ever be stricter than the backend, never looser. Backend
enforcement is unchanged and remains the authoritative path-traversal
gate; the client change is UX only.

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
## TL;DR

Bumps the `@playwright/test` catalog entry from `^1.50.1` to `^1.61.1` —
four additive minor releases; none of the removed deprecations
(`_react=`/`_vue=` selectors, `:light` suffix, `devtools` launch option)
appear in our test code. Also switches `examples/react/kitchen-sink`
from a hardcoded `^1.49.0` to `catalog:` so all seven consumers share
the workspace version.

Dev/test-only dependency; both test suites compile and list cleanly on
1.61.1 (`playwright test --list`), and the existing Playwright E2E job
covers the rest.

## Links

- Dependency audit: tinacms/tinacloud#3820

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## tinacms@3.10.0

### Minor Changes

- [#7136](#7136)
[`c809733`](c809733)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - editorial
workflow - add toggle to switch PRs created between draft and ready to
review mode

### Patch Changes

- [#7141](#7141)
[`3a1b39a`](3a1b39a)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - Update
`@radix-ui/*` dependencies to their latest patch/minor releases and
remove the unused `@radix-ui/react-checkbox` dependency

- [#7140](#7140)
[`de4a807`](de4a807)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - Add a
PostHog `editorial-workflow-save` event that records which save option
was used in the "Save changes to new branch" modal (draft, ready for
review, or publish), whether the save succeeded, and the failure reason
when it didn't.

- [#7138](#7138)
[`8497110`](8497110)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - Editorial
workflow: replace the draft / ready-for-review toggle in the "Save
changes to new branch" modal with a save-options dropdown (Save draft,
Save (ready for review), Save and publish). The split button's main
action reflects the editor's last choice (default Save draft, remembered
via localStorage), and Save and publish is disabled with a tooltip on
protected branches.

- [#7131](#7131)
[`22d0c0d`](22d0c0d)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - move
floatingtoolbar for links to a react portal

- [#7123](#7123)
[`5148d67`](5148d67)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - refactor:
replace hardcoded error-message string checks with shared
error-identifier constants in `@tinacms/schema-tools`, so producers and
consumers reference one source of truth instead of fragile
`error.message.includes('...')` matching (#6777)

- [#7143](#7143)
[`ff10e65`](ff10e65)
Thanks [@kulesy](https://github.com/kulesy)! - Unify folder-name
validation with the document-filename and backend `relativePath`
allowlist. The Create Folder modal now rejects names with disallowed
characters (e.g. spaces) inline instead of letting the request fail on
the backend, and a project-level `folderNameRegex` is layered on top of
that baseline. The allowlist lives in a single shared constant in
`@tinacms/schema-tools`.

- [#7128](#7128)
[`b53a51c`](b53a51c)
Thanks [@Aibono1225](https://github.com/Aibono1225)! - Harden message
handling in the `useEditState` hook so it validates the sender of
incoming `message` events, matching the `isFromAdmin(event,
trustedAdminOrigins)` check already used by `useTina`. The hook now also
removes its `message` listener on unmount. Legitimate admin→preview
behavior is unchanged.

- Updated dependencies
[[`5148d67`](5148d67),
[`ff10e65`](ff10e65)]:
  - @tinacms/schema-tools@2.8.3
  - @tinacms/mdx@2.1.9
  - @tinacms/search@1.2.21
## @tinacms/app@2.5.8

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
  - @tinacms/mdx@2.1.9
## @tinacms/cli@2.5.3

### Patch Changes

- [#7157](#7157)
[`aef9de0`](aef9de0)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - Bump
`@tailwindcss/typography` to 0.5.20

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
  - @tinacms/schema-tools@2.8.3
  - @tinacms/graphql@2.4.7
  - @tinacms/app@2.5.8
  - @tinacms/search@1.2.21
## @tinacms/datalayer@2.0.27

### Patch Changes

- Updated dependencies
[[`5148d67`](5148d67),
[`ff10e65`](ff10e65)]:
  - @tinacms/graphql@2.4.7
## @tinacms/graphql@2.4.7

### Patch Changes

- [#7123](#7123)
[`5148d67`](5148d67)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - refactor:
replace hardcoded error-message string checks with shared
error-identifier constants in `@tinacms/schema-tools`, so producers and
consumers reference one source of truth instead of fragile
`error.message.includes('...')` matching (#6777)

- [#7143](#7143)
[`ff10e65`](ff10e65)
Thanks [@kulesy](https://github.com/kulesy)! - Unify folder-name
validation with the document-filename and backend `relativePath`
allowlist. The Create Folder modal now rejects names with disallowed
characters (e.g. spaces) inline instead of letting the request fail on
the backend, and a project-level `folderNameRegex` is layered on top of
that baseline. The allowlist lives in a single shared constant in
`@tinacms/schema-tools`.

- Updated dependencies
[[`5148d67`](5148d67),
[`ff10e65`](ff10e65)]:
  - @tinacms/schema-tools@2.8.3
  - @tinacms/mdx@2.1.9
## @tinacms/mdx@2.1.9

### Patch Changes

- Updated dependencies
[[`5148d67`](5148d67),
[`ff10e65`](ff10e65)]:
  - @tinacms/schema-tools@2.8.3
## @tinacms/schema-tools@2.8.3

### Patch Changes

- [#7123](#7123)
[`5148d67`](5148d67)
Thanks [@joshbermanssw](https://github.com/joshbermanssw)! - refactor:
replace hardcoded error-message string checks with shared
error-identifier constants in `@tinacms/schema-tools`, so producers and
consumers reference one source of truth instead of fragile
`error.message.includes('...')` matching (#6777)

- [#7143](#7143)
[`ff10e65`](ff10e65)
Thanks [@kulesy](https://github.com/kulesy)! - Unify folder-name
validation with the document-filename and backend `relativePath`
allowlist. The Create Folder modal now rejects names with disallowed
characters (e.g. spaces) inline instead of letting the request fail on
the backend, and a project-level `folderNameRegex` is layered on top of
that baseline. The allowlist lives in a single shared constant in
`@tinacms/schema-tools`.
## @tinacms/search@1.2.21

### Patch Changes

- Updated dependencies
[[`5148d67`](5148d67),
[`ff10e65`](ff10e65)]:
  - @tinacms/schema-tools@2.8.3
  - @tinacms/graphql@2.4.7
## @tinacms/vercel-previews@0.2.17

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
## create-tina-app@2.1.10

### Patch Changes

- [#7122](#7122)
[`90833f1`](90833f1)
Thanks [@kulesy](https://github.com/kulesy)! - feat(create-tina-app):
stream live install activity on the spinner
## next-tinacms-azure@15.0.0

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
## next-tinacms-cloudinary@27.0.0

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
## next-tinacms-dos@24.0.0

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
## next-tinacms-s3@24.0.0

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
## tinacms-authjs@24.0.0

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
  - @tinacms/schema-tools@2.8.3
## tinacms-clerk@24.0.0

### Patch Changes

- Updated dependencies
[[`c809733`](c809733),
[`3a1b39a`](3a1b39a),
[`de4a807`](de4a807),
[`8497110`](8497110),
[`22d0c0d`](22d0c0d),
[`5148d67`](5148d67),
[`ff10e65`](ff10e65),
[`b53a51c`](b53a51c)]:
  - tinacms@3.10.0
## tinacms-gitprovider-github@4.1.14

### Patch Changes

- Updated dependencies []:
  - @tinacms/datalayer@2.0.27

Co-authored-by: Tina Release Bot <bot@tina.io>
@pull pull Bot locked and limited conversation to collaborators Jul 6, 2026
@pull pull Bot added the ⤵️ pull label Jul 6, 2026
@pull pull Bot merged commit ebafd8f into code:main Jul 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants