Repository navigation
Conversation
Every text task moves from GPT-5.6/GPT-6 Luna to claude-haiku-5-5 through @ai-sdk/anthropic. The ChatGPT visibility probe stays on OpenAI, and Claude visibility now measures with Haiku at low effort instead of Sonnet. - aiModel picks the provider per task and gives Haiku thinking headroom on top of each call-site budget, since thinking shares max_tokens - aiWebSearchTool(task, depth) returns the matching provider's search tool - aiReasoning(effort) carries options for both providers - the fact-check guard and its hint now require ANTHROPIC_API_KEY
Anthropic structured output does not enforce length limits, so a seventh issue or a long note failed the whole manual generation. The caps now live in the field descriptions and reviewArticle trims the notes itself.
External and stock media are hotlinked and MediaAsset.url allows 2048 characters, but Article and ArticleSeries capped imageUrl at 255, so a Wikimedia cover from the library could not be saved. The column is TEXT; only the ZenStack validation changes.
A generated picture documents nothing, so its writer-provided description under the image only repeated the alt text. The figcaption now holds just the AI disclosure label, which tenants without disclosure drop entirely.
Consent version 3 records the publication, its GA4 ID and its advertising provider, so changing any of them asks again. Optional services only run with a matching, current decision. - article views and shares need analytics consent on the server too and use a separate HttpOnly analytics_session cookie; withdrawal deletes it - votes and feedback keep anon_session, issued only on interaction; the browser fingerprint (@fingerprintjs) is gone - GA4 loads after analytics consent without Signals or ad personalization; AdSense and GAM load after advertising consent, non-personalized - cookie settings are reachable from the footer
The editor groups widgets by placement and previews the draft inside the real publication page (home or a featured article, desktop or mobile) in a same-origin iframe. The frame talks to the editor over a validated postMessage bridge and blocks clicks and form submits. On platform hosts, ?widgetPreview=1&widgetPreviewSite=<domain> resolves that tenant's public site; a tenant domain ignores the query so it can never render another tenant's chrome. The preview hides dashboard chrome, consent, ads and dev tools and is noindex. The preset picker (Gallery) is replaced by a categorized preset library with live thumbnails.
- consent and widget components drop visual utilities from Nuxt UI primitives (block buttons, ULink for the footer settings action), label their switches by id, and use USkeleton instead of a spinner - the announcement editor styles TipTap through editorProps classes instead of a scoped <style> - the preview slot chip is a UButton; the tiles that cover a live preview keep a transparent native button and are allowlisted with the reason - appEntry tests pass a route query, as real routes always have one - CI typecheck gets a 6 GB heap; vue-tsc has hit OOM since 2026-10-09
Text tasks now run on Anthropic while images and embeddings stay on OpenAI, so naming one vendor made the processor list untrue. GDPR allows categories of recipients; the policy now says AI model providers (US).
The terms page printed a hardcoded Czech-formatted '1. 1. 2026' in every language instead of legal.updatedAt.
Both documents drop from 13 to 10 sections (139 kB to 57 kB across four locales). What remains is what the law or a platform requires: consumer withdrawal and ADR, GDPR recipients, transfers, retention and rights, the LinkedIn retention limits and the Shopify deletion flow. The operator's identity moves to the last section. The app copy lacked the Google Search Console section that Google OAuth verification for webmasters.readonly needs; it is back in short form, with the Limited Use statement, and the cs/en copies match ../landing again.
The smoke job builds on Node and hit the default V8 heap; the production image builds on Bun and is unaffected.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
@ai-sdk/anthropic). The ChatGPT visibility probe stays on OpenAI, and Claude visibility uses Haiku instead of Sonnet. Haiku gets thinking headroom on top of each call-sitemaxOutputTokens, and the copy desk no longer fails on length caps that Anthropic does not enforce.imageUrlallows 2048 characters, likeMediaAsset.url. AI illustrations keep their description inaltonly.analytics_sessioncookie. The browser fingerprint is removed. Visitors will be asked again after deploy.Before deploy
ANTHROPIC_API_KEY(orNUXT_ANTHROPIC_API_KEY) is set in production. Without it, all text AI fails.Verification
Typecheck, lint and prettier pass, and 700 tests pass in the touched areas. A Haiku article was generated end to end locally (research, writing, review, revision, images, poll). The consent gate on
/viewwas checked live: no consent, denied, granted and stale configuration.