Skip to content

Commit 06e4b37

Browse files
boutellraveman179theluckystrikemyovchevlindsayhi
authored
Latest reconciliation q4 m1 2026 (#5664)
* Fix UTF-8 attachment filenames (#5630) Co-authored-by: y_sugawara <y_sugawara@akibi.ac.jp> (cherry picked from commit b16cbb1) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * thanks for pull request 5630 (#5638) (cherry picked from commit ce2b1ab) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * sanitize-html: remove unneeded deepmerge dependency (#5639) Combining tag-specific and wildcard allowedClasses and allowedStyles entries only ever needed simple array concatenation. sanitize-html was not exploitable via CVE-2026-93753 in deepmerge, since it only merged the developer's own configuration, but removing the dependency clears the scanner reports. (cherry picked from commit bf5a2a6) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Fix mistyped i18n interpolation variables in translations (#5645) Several translations retyped or translated i18next variables, for example {{ SkipCount }}, {{ skipcount }}, {{ Count }}, {{ ancho }} and {{ format }}. i18next cannot resolve these names, so the values render as empty strings. The batch localization notifications lost their localized and skipped counts, the minimum image size lost its dimensions, and import errors lost the file type. Restore the variable names used in en.json and by the calling code, and drop the English text appended to the German commandMenuCreateNew label. Add a test that fails when a bundled core translation uses a variable en.json does not declare, and that renders the batch notifications in every locale. scripts/scan-translations.mjs now reports no placeholder-mismatch or malformed-interpolation errors. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 6c76487) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Remove bestPage for external fronts (#5646) (cherry picked from commit e610368) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * thank Michael Lip for his i18n fixes (#5647) (cherry picked from commit 5ce3732) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Give icon-only widget breadcrumb operations a screen reader name (#5605) Icon-only breadcrumb operations, such as the Styles button on a layout column, were announced as "Provide a Button Label". They now get an aria-label from the operation's label, or from its tooltip when no label is set. Also labels the hidden layoutColMove operation. (cherry picked from commit 40f352b) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Gemini Interactions API adapter, Claude 5.5 and GPT-6 models (#5649) * Text and tools, structured output * Thinking and errors * Images * Docs and smoke tests * Bump Anthropic and OpenAI models (cherry picked from commit 9f3afdc) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * PRO-10163: multiple problems with inline fields on Astro only (#5651) (cherry picked from commit 3c50881) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Astro per-site literal content routes for multisite (#5648) * per-site literal content routes for multisite * README detail * Increase in-memory caching count (cherry picked from commit e79bb0e) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * PRO-10168: server side errors reported in widget modals should be visible (#5652) * show server errors to the user in the widget modal * changeset (cherry picked from commit db625b2) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Disable Save in the media manager's image editor until the image changes (#5654) * Fix detect changes in the image editor, remove decorative Shadow tooltip text for screen readers. * Proper confirmation question on relationship changed image (cherry picked from commit bdaf318) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * PRO-10147: fixed the apostrophe:image tooltip (#5657) (cherry picked from commit 6af1243) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Fix missing and broken strings (#5600) Co-authored-by: Tom Boutell <tom@apostrophecms.com> (cherry picked from commit b7084c9) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Bump Haiku to 5.5 (#5653) (cherry picked from commit 3cca1b8) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * AI: a usage record for every billed provider response (#5656) * Dedicated usage tracking event * Report explicit image usage tokens * Improve changeset (cherry picked from commit d503bda) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Add tests marker for relationship modalls (#5659) (cherry picked from commit 5b247e0) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Restore console output of command line tasks (#5660) (cherry picked from commit eea226c) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Bump dependencies for security advisories (#5661) (cherry picked from commit 2a6b396) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * All advisories 2026 q4 m1 (#5663) * Add failing test for GHSA-5gc8-frw3-3vqm * Add failing test for GHSA-c9rx-x947-fp3h * sanitize-html: bound recursion into discarded iframe fallback and carry nesting depth (GHSA-c9rx-x947-fp3h) * Use unguessable file names for export downloads (GHSA-5gc8-frw3-3vqm) * Add failing test for GHSA-rqgm-cfrp-4hx8 * Add failing test for GHSA-7jg5-frgc-c67w * Add failing test for GHSA-5m22-7pfq-vp65 * Add failing test for GHSA-rw26-wwfc-9wvm * Escape widget style wrapper attributes and reject unsafe style values (GHSA-7jg5-frgc-c67w) * Ignore sort keys and field filters hidden by publicApiProjection in public REST API requests (GHSA-rqgm-cfrp-4hx8) * Require the import owner for clean-export and a login for override-duplicates (GHSA-rw26-wwfc-9wvm) * Require publish permission for published documents written by import (GHSA-5m22-7pfq-vp65) * Reword GHSA-5m22-7pfq-vp65 changeset * Add failing test for GHSA-vmgj-9cwm-cf3h * Add failing test for GHSA-vh56-5m88-39rq * Require the whole color field value to be a valid color (GHSA-vmgj-9cwm-cf3h) * Add failing test for GHSA-jf5h-36mg-rp6x * Remove viewPermission fields from all page REST responses, including embedded _ancestors and _children (GHSA-vh56-5m88-39rq) * Add failing test for GHSA-rqgm-cfrp-4hx8: projection of embedded ancestors and children * Bind import duplicate replacement to the server-side analysis and authorize the actual target (GHSA-jf5h-36mg-rp6x) * Limit embedded ancestors and children to publicApiProjection in anonymous page REST requests (GHSA-rqgm-cfrp-4hx8) * Add failing test for GHSA-f66c-mpj2-3r8h * Add failing test for GHSA-9g7p-m758-rp72 * Require editing permission for the slug-taken route (GHSA-f66c-mpj2-3r8h) * Limit import archive extraction and clean up after failed imports (GHSA-9g7p-m758-rp72) * Add failing test for pending import archive exposure (GHSA-5gc8-frw3-3vqm) * Add failing test for related-doc forbidden fields (GHSA-vh56-5m88-39rq) * Test that public API search results stay sorted by search quality (GHSA-rqgm-cfrp-4hx8) * Add failing core tests for GHSA-5m22-7pfq-vp65 * Encrypt pending import archives kept in uploadfs (GHSA-5gc8-frw3-3vqm) * Revert encryption of pending import archives An unguessable name is enough here, see the following commits. * Update failing test for pending import archive names (GHSA-5gc8-frw3-3vqm) * Remove viewPermission fields from related documents in page and piece REST responses (GHSA-vh56-5m88-39rq) * Cover anonymous public API access to related documents (GHSA-vh56-5m88-39rq) * Use unguessable names for pending import archives (GHSA-5gc8-frw3-3vqm) * Honor publishRole and the document's own mode for published edits in core (GHSA-5m22-7pfq-vp65) * Add failing test for big upload chunk ids (GHSA-5gc8-frw3-3vqm) * Use unguessable ids for big upload chunks (GHSA-5gc8-frw3-3vqm) * Add failing test for forbidden fields in REST write responses (GHSA-vh56-5m88-39rq) * Add failing test for GHSA-rqgm-cfrp-4hx8: projection of related documents * Use generateId for export names; revert pending archive and big upload changes (GHSA-5gc8-frw3-3vqm) cuid2 3.x already draws on the platform's cryptographically secure random number generator, so pending import archive names and big upload chunk ids were already unguessable. * Add failing test for GHSA-rqgm-cfrp-4hx8: projection of related pages * Remove viewPermission fields from page and piece REST write responses (GHSA-vh56-5m88-39rq) * Add failing test for GHSA-rqgm-cfrp-4hx8: projection of related images * Limit related documents to the publicApiProjection of their own type in public REST API responses (GHSA-rqgm-cfrp-4hx8) * Add failing test for viewPermission fields in version change lists (GHSA-vh56-5m88-39rq) * Leave viewPermission fields out of version change lists (GHSA-vh56-5m88-39rq) * Add failing tests for viewPermission fields in version change counts and highlights (GHSA-vh56-5m88-39rq) * Leave viewPermission fields out of version change counts and highlights (GHSA-vh56-5m88-39rq) * Revert limiting related documents to their own type's publicApiProjection Relationships only appear in public API responses when the developer lists them in publicApiProjection, and their fields can be limited with the relationship's own projection. * Remove inaccurate mitigating factor from changeset (GHSA-5gc8-frw3-3vqm) * Compare public API search order with the database's own ranking (GHSA-rqgm-cfrp-4hx8) * Leave mode and publish authorization of replaced documents to core (GHSA-jf5h-36mg-rp6x) Writes go through core with permission checks on, which enforces publishRole, and archives with inconsistent modes are rejected when they are read. Keep only the import-specific type check on the replaced document. * Fix GHSA-7jg5-frgc-c67w at the attribute sink only Drop the render-time style value and class token filtering and the getWidgetElements id escaping; escaping in getWidgetAttributes covers it. * Check the login for clean-export once, in its route (GHSA-rw26-wwfc-9wvm) * Restore upstream handling of tar entry types and unsupported uploads (GHSA-9g7p-m758-rp72) The limits and the cleanup wrapper already cover both. * Record test versions in distinct milliseconds so their order does not depend on the database (GHSA-vh56-5m88-39rq) * Remove viewPermission fields once, in the shared REST API route wrapper (GHSA-vh56-5m88-39rq) * Trust the request mode in core, enforce publishRole in core only, keep import's mode validation (GHSA-5m22-7pfq-vp65) (cherry picked from commit 40b989b) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg * Add a patch changeset for the relationship chooser test marker (#5659) Claude-Session: https://claude.ai/code/session_01VG5Nqou7GgfGpKgG7J2wEg --------- Co-authored-by: raveman179 <telebit179@gmail.com> Co-authored-by: Michael Lip <51033404+theluckystrike@users.noreply.github.com> Co-authored-by: Miro Yovchev <2827783+myovchev@users.noreply.github.com> Co-authored-by: lindsayhi <66084010+lindsayhi@users.noreply.github.com> Co-authored-by: Robert Means <robert@apostrophecms.com>
1 parent 9500b8b commit 06e4b37

187 files changed

Lines changed: 9181 additions & 1786 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.changeset/ai-usage-records.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"apostrophe": minor
3+
---
4+
5+
Added the `@apostrophecms/ai:usage` event: one record per provider response, with its own token counts, and the ability to add attribution via the new `usageMetadata` option. This may be helpful in pricing and billing AI use by your own customers. Please note that the billing policies of AI providers are subject to change.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"apostrophe": patch
3+
---
4+
5+
Security: the color field accepted any value that merely contained a valid `rgb()`, `hsl()` or similar color, so extra content before or after the color was stored as-is. When such a color is used by a widget style field rendered inline (no `selector`), that content reached the wrapper's `style` attribute and could inject HTML attributes into the published page. The whole value must now be a valid color, otherwise it is discarded like any other invalid color. Legitimate values (hex, named colors, `transparent`, `rgb()`/`rgba()`/`hsl()`/`hsla()` notations, CSS variable names) are stored unchanged. Exploitation requires permission to edit content using a color field (CWE-20, CWE-79, GHSA-vmgj-9cwm-cf3h).
6+
7+
Thanks to [N.HARSHA VARDHAN](https://github.com/saiharsha0546-dot) for reporting the vulnerability.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"apostrophe": patch
3+
"@apostrophecms/apostrophe-astro": patch
4+
---
5+
6+
Fields rendered in place with `AposField` in a widget can be edited as soon as the widget is added or saved in Astro, rather than only after the page is refreshed. Rich text fields in such a widget no longer appear as escaped markup during live preview and inline editing. Empty fields of a widget that was just saved can be selected and edited on the page right away, as they can be in a Nunjucks or JSX project.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"apostrophe": minor
3+
"@apostrophecms/apostrophe-astro": minor
4+
---
5+
6+
Astro now routes literal content files such as `robots.txt` and `llms.txt` to the right site in multisite projects, using the new `literalRoutesScope` option of `@apostrophecms/url`.

‎.changeset/astro-no-best-page.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"apostrophe": patch
3+
---
4+
5+
Page data sent to Astro and other external fronts no longer includes `bestPage`, which only serves to populate `page` and made the payload a third larger; use `page` instead. A project that still needs it can restore it by extending the `pruneDataForExternalFront(req, template, data, moduleName)` method of `@apostrophecms/template` and setting `data.bestPage = req.data.bestPage`.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"apostrophe": patch
3+
---
4+
5+
Fixed icon-only widget breadcrumb operations, such as the Styles button on a layout column, being announced by screen readers as "Provide a Button Label". These buttons now take their accessible name from the operation's `label`, or from its `tooltip` when no label is set. This also covers breadcrumb operations added by project code.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"apostrophe": minor
3+
---
4+
5+
The Anthropic and OpenAI AI adapters now default to Claude Haiku 5.5, Sonnet 5.5 and Opus 5.5, and to GPT-6 Luna and GPT-6.1 Sol.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
"@apostrophecms/import-export": patch
3+
---
4+
5+
Security: the `clean-export` and `override-duplicates` routes did not require a login. Also, `clean-export` would discard the pending files of an import started by someone else and mark any import job as completed, without checking who owned either. Both routes now require a logged-in user. `clean-export` only acts on an import uploaded by the caller, and only ends that caller's own job. Import jobs are now recorded as belonging to the user who started them. Exposure was limited because the pending import's ID is random and only shown to the user who uploaded it, so in practice an attacker could only interfere with an import they could already identify (CWE-306, CWE-862, CWE-639, GHSA-rw26-wwfc-9wvm).
6+
7+
Thanks to [Liuhuo Wan](https://github.com/CoSunshine) for reporting the vulnerability.

‎.changeset/csv-parse-7.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"apostrophe": patch
3+
"@apostrophecms/import-export": patch
4+
---
5+
6+
Upgrade `csv-parse` to 7.x to address a security advisory.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"csv-to-zone-file": patch
3+
---
4+
5+
Upgrade `csv-parse` to 7.x and stop installing ESLint as a runtime dependency, to address security advisories.

0 commit comments

Comments
 (0)