Changelog
What's new in Valkiria
Built from the public commit history — features and fixes, grouped by month, last six months.
November 2026
New 40 · Fixed 40- Newwhite-labelagency team members see the agency's clients in Client portal (manager manages access, viewer opens the portal); portal hides redacted spend instead of showing 0; human platform names in portal and monthly report
- Newfiltersanalytics and report platform choices come from the platforms in use
- Newfiltersevery platform with campaigns on the dashboard type filter; LinkedIn and Reddit in analytics and reports
- Newchatcampaigns of every connected platform, as on the Campaigns screen
- NewtgVillReach as the raised centre tab of the Mini App
- Newanalyticsseveral ad accounts at once on the Analytics page
- Newcampaignsshared searchable multi-select for ad accounts and platforms
- Newtgsearch and multi-select ad accounts and platforms in the Mini App
- Newfiltersproject on synced creatives (by ad account) and finance operations (by campaign)
- Newprojectslink and unlink connected ad accounts on the project page
- Newtelegram-adsfilter bar on drafts — project, status, search, period by creation day
- Newcampaign-careperiod and project on the list and its counts, applied by the server
- Newdashboardtiles for the chosen period and the header project
- Newtgday-by-day tooltip and metric switch on the Mini App home chart
- Newissue short-lived sandbox partner keys through authenticated admin API
- Newfilterstype and period on the Google account campaigns table; period on Telegram ad statistics
- Newsmmcalendar and post analytics follow the header project
- Newfiltersapprovals queue follows the client filter, history the period; client pages by status; synced creatives by period
- NewseoSEO project choice is the header project
- Newanalyticsevery tab follows the page filters or says it is all-time; status filter matches provider wording
- Newfiltersfinance analytics, spending chart and value ledger follow the page period
- Newfiltersplatform top tiles follow the shared period
- NewanalyticsReddit and Telegram daily facts in the period report
- Newfiltersone period across campaigns, reports, analytics, finance and lead quality; creative tiles follow filters
- Newfiltersproject filter and wrapping filter bar on every ad account list
- Newfiltersproject, period and campaign type on every ad campaign list; header project selector works again
- Newadd private business-scoped CRM image workflows
- Newrecord isolated closed-period partner accounting
- Newexpose isolated versioned partner pricing quotes
- Newadd exact reusable partner pricing models
- Newadd isolated managed-account planning for CRM partners
- Newexpose documented CRM partner sandbox API
- Newdeliver signed CRM partner webhooks reliably
- Newadd isolated CRM partner sandbox foundation
- Newmessengerthe mobile app opens from WhatsApp, Messenger and Viber by a one-time sign-in link; each bot uses its channel's own buttons; admins see what every channel still needs
- NewuiVillReach chat keeps one toolbar row above the conversation (steps, expert tools, prompt hints, build drafts) so the panel takes most of the screen
- Newevent-offerattendee list with raffle for the owner, follow-up messages, fixed discount on the plans page
- NewtgMini App works as one app — search across sections, campaigns, ad accounts, projects and alerts from every screen; Home shows period numbers with change against the previous period and a clicks chart, by platform; campaign list filters by ad account and sorts from a bottom sheet with removable chips; approvals and alerts are searchable; a campaign links to its ad account, approvals and analytics; headers never widen the page; long names and badges wrap on 320px
- Newtgsections inside the Mini App open on their data — one-line headers and sideways action strips, compact number tiles, folded filters and explanations, campaign and account cards instead of 1180px tables, sticky first column in remaining tables, no tours or video guides, date picker fits 320px; Italian presets and plan-meter strings; Agency OS badges wrap
- NewuiVillReach chat fills the screen (compact header, panel ends at the screen edge, chat list beside it only from 1280px); campaigns and ad accounts list running items first by default
- Fixedtgforecast counters keep whole words on a phone — decorative icon tiles left out in the Mini App
- Fixedtgdata hub counter labels keep whole words on a phone — the decorative icon is left out in the Mini App
- Fixedone Google campaign id per customer; share page speaks the reader's language
- Fixedtgadvertising and analytics sections open on their data in the Mini App — rule, scenario, report-guide, clone-queue and data-hub explanations fold into one line; filters fold on budget control, external changes, campaign care, creatives and attribution; external changes show cards instead of a seven-column table; creative actions in one sideways strip; data hub and creative counters as compact tiles
- Fixedsharea password-protected report link shows the password form, not «link unavailable»
- Fixedtg«All» campaigns leaves out removed ones, as the web list does
- Fixedwhite-labellong multi-currency spend wraps inside the portal tile on phones
- Fixedtgthe background-sync badge on Users no longer covers the list in the Mini App
- Fixedwhite-labelportal trend chart reads the same daily metrics store as the tiles (it stayed empty for synced accounts)
- Fixedwhite-labellive portal tiles read period totals from the daily metrics store (provider sync first, as the monthly builder and pacing), per currency; breakdown by ad platform; neutral wallet icon for spend
- Fixedcampaignsspend and CPC sort within a currency instead of ranking UAH against EUR
- Fixedtguser refresh controls fold into one line, e-commerce numbers two per row and setup note two lines, notification export buttons wrap, proxy dialog fields one per row below 400px
- FixedtgValkiriaOS readiness cards one per row on a phone
- Fixedtgfinance status values and ad-operations counter labels fit two columns on a phone
- Fixedtgfinance sync row wraps only inside the Mini App; the regular site keeps its layout
- Fixedwhite-labelportal spend is shown per real campaign currency (no hard-coded $), per-currency spend is redacted with the rest when costs are hidden
- Fixedtgtwo-column number tiles on 320px phones use 12px labels that hyphenate instead of splitting long Russian and Ukrainian words
- Fixedtgadmin users counters use the Mini App number tiles
- Fixedtgsections fit the Mini App at 320–768 — SMM post status and title wrap whole, users/notification/proxy numbers two per row without big icons, user role badges stay on one line, finance status values fit, AI provider rows put the controls on a second line, ValkiriaOS and system manual cards move the status under the title, ad-provider mode cards one per row, guide tiles smaller; German SEO & AIO title spaced
- Fixedtgstatus badges wrap between words, never letter by letter; six tab labels fit 320px in every language (shorter Russian, Ukrainian, Czech, Slovak, Italian, French and Polish labels, 10px below 400px)
- Fixedwhite-labelagency-client buttons stack on phones; sk 'Otvoriť portál'
- FixedtgSEO toolkit title fits 320px and the data-sources note folds to two lines in the Mini App
- Fixedcarebudget moves state today's budgets and step at most +50%; market API status reads no forbidden tables
- FixeduiMeta notification history no longer crashes; leaving a crashed page clears the error screen
- Fixedwhite-labelthe portal opens for the agency owner and team members (/portal/me lists clients by the same access rule as the API)
- Fixedchata Telegram ad text check with a link keeps its tools instead of being isolated as a site audit
- Fixedi18nclient portal wording in cs/pl/sk/de/es/fr (greeting, spend, published, delivered, delivery history, AI recommendations)
- Fixedwhite-labelreport delivery log no longer keeps a copy of the guest link
- Fixedgoogle-auditread every GAQL page so large cabinets are not audited on a truncated first page
- FixedtgContent/Business/Admin sections fit the Mini App — SEO quick actions are one row each (40px icon, title, caption, inline MULTI/PRO badge, same border), system-log and moderation numbers two per row, Users tabs scroll sideways, AI-providers note hidden, finance badge never splits
- Fixedtgone Back button — the Telegram header's own when it exists, ours only in chats without it; VillReach listed once (it is the centre tab); one style for every section inside the Mini App: one type scale, card padding and 40px icon tiles, no gradient fills, glows, coloured borders or hover lifts, tappable tiles one per row on phones (SEO quick actions no longer split words), tab labels on one line
- Fixedevent-offerthe raffle winner's year of Pro stays purchasable on the plans page
- Fixeddashboardrestore the Campaign type import dropped with the per-platform header colours
- Fixedchatapproving a recommendation from the chat needs a second, explicit confirmation
- Fixedevent-offerfree conference Pro carries the trial AI cap; the raffle prize is full Pro; no offer after the first payment
- Fixedchatdata questions always read their tool before the model answers
- Fixedtgthe centre tab is named VillReach in every language (the key was missing everywhere) and the VillReach page inside the Mini App opens the Mini App chat, whose composer sits above the tab bar
- Fixedevent-offerthe events section describes every conference, not Cyprus Valley only
- Fixedchatname the SMM, SEO and Telegram policy tools the model must call
- Fixedchatcampaign counts come from the tool, not from the model counting a sample
October 2026
New 40 · Fixed 40- Newexpose trusted local support stage diagnostics
- Newseoadd systematic multilingual typo discovery tooling
- Newseocover cross-language brand spelling variations
- Newseoestablish multilingual brand identity and query research
- Newchatcopy individual generated code blocks
- NewsmmMeta comment moderation and on-demand insights for App Review
- Newground isolated website audits in safe HTML snapshots
- Newrebuild the public audit journey and explicit onboarding
- Newlandingfree ad-account audit funnel, public copy fixes, user suspension
- Newadd owner-scoped article generation diagnostics
- Newmake recurring client and project growth plans production-ready
- Newadd multilingual Valkiria article promotion strategy
- Newgrowth-analystfunctions API for run/list/detail/act + connect hooks
- Newgrowth-analystautonomous weekly/monthly growth plans with claim-locked scheduler
- Newgrowth-analystMiroFish sidecar adapter for optional plan simulations
- Newdashboard'Plan of the week' Growth Analyst widget
- Newgrowth-analystpage, plan detail view, navigation, i18n
- Newchatrestore local conversations and drafts for 30 days
- Newchatadd reviewed local ZIP downloads to VillReach
- Newzipadd bounded local Blob archive packaging
- Newchatground ZIP logo colors in verified image pixels
- Newstoragemeasure palettes from bounded owned image bytes
- Newintegrate SEO marketing reports into campaign care
- Newadd authorized Search Console marketing analysis
- Newadd marketing analysis to campaign care
- Newadd evidence-based marketing account analysis
- Newseoown Google sources - Search Console history, Keyword Planner ideas, clustering by meaning
- Newenforce final article quality across publication paths
- NewseoGoogle Search Console ranks and platform Keyword Planner volumes
- Newseoown SEO data layer around paid providers — shared SERP/volume cache, breaker, daily budget, stale-but-honest fallback
- NewsupportVala comes alive — canvas portrait that breathes, blinks, follows the pointer and speaks
- Newseospend purchased SEO top-up packs after the plan allowance
- Newseohonest, enforced SEO allowances per plan with a Plan & usage panel
- Newbillingone-time top-up credit packs on Stripe; reverse trial 14 days
- Newguidesvoiced video guides and written steps in all 9 languages
- Newdesign-studioEscape closes the editor, asking first when canvas work is unsaved
- Newonboardingthe website check is the first screen for new users
- NewsupportVala consults on the customer's own account, takes requests, speaks nine languages natively
- Newbillingreal AI cost ledger, admin AI economics, refunds for failed deep analysis, cost-weighted video
- Newbillingclose trial anti-abuse gaps — OAuth device carry, fingerprint, VPN/hosting/Tor, signup limit, background AI cap
- Fixedqualify campaign snapshots with an unknown reporting period
- Fixedformat all nine interface languages explicitly
- Fixedkeep actual campaign metric values inside mobile cards
- Fixedscope support account context to explicit consultation
- Fixedkeep segment identity guards compatible with ES2020
- Fixedpreserve campaign currencies on the actual statistics route
- Fixedremove fabricated campaign demographic segment metrics
- Fixedpreserve unknown campaign conversion summaries
- Fixedalign campaign statistics with source-currency metric cards
- Fixedkeep automation rule controls inside mobile cards
- Fixedqualify configured local models without enabling reserves
- Fixedpreserve source currencies in campaign metric cards
- Fixedvalidate image URL control characters without lint violations
- Fixedenforce guest checkout item limit in route schema
- Fixedbound guest checkout parsing and pin patched server Zod
- Fixedalign creative fatigue severity and summaries with scores
- Fixedprevent synthetic storefront catalog payment flows
- Fixedsupport text tracking identifiers in omnichannel evidence
- Fixedexport qualified omnichannel evidence consistently
- Fixedrefresh campaign settings after confirmed budget saves
- Fixedpreserve source evidence across omnichannel tabs
- Fixedload email log navigation copy in every supported locale
- Fixeddistinguish unavailable email tracking from measured zero
- Fixednormalize storefront product images and recover failed loads
- Fixedbind campaign care reads and actions to current context
- Fixedpaginate campaign care and automation rule cards
- Fixedpreserve native event evidence in omnichannel overview
- Fixedisolate campaign settings drafts by record identity
- Fixedreject malformed daily budget save receipts
- Fixedpreserve campaign currencies and confirm daily budget saves
- Fixedkeep recommendation trust low when evidence loading fails
- Fixedreport unavailable omnichannel data as an RPC error
- Fixedisolate Meta entity writes and redact resolver credentials
- Fixedrequire measured tracking evidence before healthy trust
- Fixedchatcontain assigned project and client labels
- Fixedchatground screenshot requests in text-only capabilities
- Fixedenforce answer admission for interactive automation explanations
- Fixedadmit legacy automation explanations through an owned profile
- Fixedsmmask Meta for the insights metrics it still serves
- Fixedreject unexecuted MCP and generic visual-reading claims
September 2026
New 40 · Fixed 40- Newadswhat the system found in a cabinet has a screen
- Newadsnew copy is shown before it is published, and what was shown is published
- Newadsthe system closes what its own audit finds in a campaign it built
- Newadswhat was done by hand in a campaign switch, done by the system
- Newadsa query the client ordered by name survives the volume filter
- Newadsthe review covers Meta cabinets too, not only Google
- Newadsthe review runs itself every 36 hours, per cabinet
- Newadsthe account review as a model, a document and a calibration
- Newadsread where the clicks land, because that is where the money is lost
- Newfinanceexpose opt-in exact ledger decimal projection
- Newfinanceconnect cash flow to timezone-aware periods
- Newfinancefilter native cash flow by exact interval
- Newfinanceexpose owned native-currency cash-flow evidence
- Newadsthe system works out who gives up budget, not just who is short
- Newadsevery finding becomes a recommendation the system can carry out on approval
- Newexpose explicit LinkedIn report periods
- Newmetasave owned pixel audience drafts atomically
- Newmetapersist owned draft creation receipts atomically
- Newchatinclude canonical provider analytics evidence
- Newmcpexpose canonical provider analytics report
- Newlinkedindispatch durable campaign pause over POST
- Newlinkedinpersist pause intents and receipts
- Newlinkedinadd verified pause executor foundation
- Newbillingpreserve audited seller configuration on new invoices
- Newbillingexpose verified owner-only Stripe invoice documents
- Newbillingadd protected seller and document settings
- Newreportsrequire destination-bound encrypted webhook keys
- Newreportsdefine authenticated webhook signature contract
- Newreportspersist owned webhook delivery receipts
- Newreportsbound and pin webhook HTTPS transport
- Newreportsdeliver owned report attachments through tracked email
- Newreportsgenerate server PDF and XLSX attachments
- Newreportsshare public projection for server text attachments
- Newemailsupport bounded in-memory report attachments
- Newreportsclaim delivery jobs without automatic replay
- Newreportsadd owner-bound delivery outbox persistence
- Newreportslocalize saved PDF and XLSX exports
- Newreportsexport paginated PDF evidence
- Newreportsdownload saved evidence as XLSX
- Newreportsdownload saved JSON evidence
- Fixedadsa cabinet the system cannot read says so, and a Meta change is made as the right user
- Fixedadsa top-up reaches the ad in one request, and a Meta finding carries its ids
- Fixedadsevery client is reviewed, and a change is checked with the platform before it is made
- Fixedadsa preview opened for the first time is shown, not reported as empty
- Fixedadsa market nobody measured is not a market of zero
- Fixedadsa campaign a day old is not told what it leaves unspent in a week
- Fixedadsevery conclusion of a review reaches the queue, in the reader's language
- Fixedadsa word spelled with the other language's stem is caught by the rules
- Fixedadswhat a model wrote is proofread, and a keyword gone from Google is gone here
- Fixedadsa cabinet is answered for only to its owner, and every recommendation can act
- Fixedadsa model that refused is reported as having refused
- Fixedadsa new ad keeps what its group is about, and a new campaign is not measured over a week
- Fixedadsa recommendation lives as long as its finding, and prepared copy is kept
- Fixedadsa finding carries the ids a change needs, and a new campaign is not an idle one
- Fixedadschoosing keywords reads a negative as an intent, in every form
- Fixedadsa campaign name is a headline only when it fits, and an unpriced group bids like its siblings
- Fixedadsa deployment snapshot too big to store recorded nothing
- Fixedadsan idle cabinet is reported as unmeasured, not as failing
- Fixedadsan autopilot run replaces its own picture instead of piling on it
- Fixedadsa cabinet that delivered nothing still gets a review
- Fixedadsasking for one cabinet by name means now
- Fixedadsthe client review reads as Ukrainian all the way down
- Fixedadsa review of one named cabinet must reach the database
- Fixedadstell a client who installed a counter what is actually missing
- Fixedmetarequire provider evidence for freshness QA
- Fixedgoogle-adskeep OAuth refresh client credentials paired
- Fixeddiagnosticsdistinguish Google refresh failure stages
- Fixedgoogle-adsrefresh expired account credentials before sync
- Fixedadspreserve explicit Google copy languages
- Fixedcampaignsload lightweight summaries for campaign list
- Fixedrecommendationsverify internal execution before monitor rollback
- Fixedcheckoutisolate shipping and tax quote ownership
- Fixedcheckoutfence responses after session changes
- Fixedcheckoutrequire verified guest payment recovery
- Fixedcartkeep mobile items and checkout readable
- Fixedcheckoutpreserve cart additions after payment
- Fixedcheckoutresume guest payments through verified recovery
- Fixedpaymentsrecover recorded guest intents without duplicate orders
- Fixedcheckoutissue private guest recovery capabilities
- Fixedpaymentspersist guest initialization request before provider call
August 2026
New 40 · Fixed 40- Newaction-planmerge account recommendations into real-plan diagnosis
- Newaction-planunified visual "План действий" deliverable (MI + analytics)
- Newbannersstronger art-direction + anti-hallucination anatomy directives
- Newdesign-studioexpand preset gallery to 78 (add 10 high-demand niches)
- Newdesign-studio48 quality-tested banner presets with preview gallery
- Newomnirankcanonical SEO domain = valkiria.pro + blog routes on valkiria.pro nginx
- Newbannerskeyless Pollinations fallback + direct free Gemini image provider
- Newomnirankper-tenant public blog by domain (Host allowlist)
- Newdesign-studiofree Together FLUX provider + attach-to-campaign in Lite
- Newdesign-studioLite provider-readiness warning + client MI context
- Newomniranklive sanitized HTML preview in BlogManager
- Newomnirank10 — generic durable job queue + dead-letter (§05 §3)
- Newdemosuse REAL system screenshots as demo backing plates
- NewdemosRemotion onboarding demos — flagship + per-module, 5 locales
- Newsmmadd Google Business Profile posting (Local Posts + business.manage OAuth)
- Newomnirank11 — BlogManager live AIO/AEO/GEO/E-E-A-T score button
- Newomnirank11 — per-tenant public blog scoping (OMNIRANK_BLOG_OWNER_ID)
- Newomnirank11 — campaign admin UI (/admin/campaigns)
- Newomnirank9d — Google Indexing API + GSC clients (thin)
- Newomnirank10 (part) — prompt override CRUD (DB-backed) + observability endpoints
- Newomnirank9e — KeywordResearchService merge core (provenance)
- Newomnirank9b — sitemap/RSS/llms generation-counter cache
- Newdesign-studioLite/Pro modes + one-click multilingual banner pack
- Newomnirank9c — ContentHeadingGuard (in-content H1 -> H2)
- Newomnirank9f — TextMetrics + Flesch readability wired into scoring
- Newomnirank8e — SeoCompletenessGate in the guard chain (§4.3)
- Newomnirank8c — PAA wired into the campaign flow
- Newomnirankauto-index on publish (IndexNow) + keyfile serving
- NewomnirankPhase 7a — engine wiring (provider clients, engine factory, Content Studio route, job ledger)
- NewomnirankPhase 6 — indexing (SSRF guard, IndexNow, sitewide submit)
- NewomnirankPhase 5c — blog frontend (DB-driven list, post page, admin manager)
- NewomnirankPhase 5b — blog backend live (content store, service, routes, mount)
- NewomnirankPhase 5a — SEO surface builders (schema, sitemap, RSS, llms, head, internal links)
- NewomnirankPhase 4c/4d — CampaignRepository seam + orchestrator
- NewomnirankPhase 4a/4b — CommercialIntentPolicy + TopicPlanner
- NewomnirankPhase 3b — LocalPublicationPolicy + AioScoreEngine
- NewomnirankPhase 3a — HumanStyleGuard + LanguageOutputGuard
- NewomnirankPhase 2 — AI engine (registry, routing, resilience onion, telemetry)
- NewomnirankPhase 1 — content data foundation + generalized secret crypto
- Newemaildelivery + open/click tracking for all outbound mail
- Fixedcreativescapitalize display names + show ad copy as preview for text creatives
- Fixedbannersstop rendering hex codes / brand name / stats as image text
- Fixedbannerstext-free v2 — drop copy/zone naming, force photographic hero
- Fixedomniranknginx proxies IndexNow keyfile (/<hexkey>.txt) to Express
- Fixedomnirank uiblog/campaign UX defects from QA sweep
- Fixedomnirankforce re-plan replaces items (no dup); idempotent finalize related-block
- FixedomnirankAI-engine resilience — empty-after-normalize, telemetry isolation, stream leak, merge seam
- Fixedomnirankharden SSR sanitizer + refine SSRF IPv6 classification
- Fixedbannersenforce text-free image generation (copy goes to overlays)
- Fixedomnirankstrip unresolved internal-link placeholders on public render
- Fixedomnirankthread the configured provider model into generation (custom providers sent empty model)
- FixedomnirankAI generation was fully broken on prod (URL double-append) + SEO/stream hardening
- FixedomnirankQA sweep — 15+ backend/frontend defects across all layers
- Fixedomnirankhuman-approval bridge — autopilot never publishes live without opt-in
- Fixeddemosdrop stale Lovable poster from flagship hero video
- Fixedomnirankmaterialize root SEO files to webroot so nginx stops shadowing them
- Fixedi18nadd 6 missing production-audit keys blocking deploy
- Fixedomnirankattribute AI spend to campaign/user so budget guard + rate limit work
- Fixedomnirankre-apply 9a schema nodes clobbered by a concurrent revert
- Fixedqa31user-facing correctness — agent crash, variant-price charge, AI-provider SSRF, fabricated ROI, storefront + i18n
- Fixedqa30security hardening — 2FA bypass, path traversal, 6 RPC IDORs, auth re-auth, webhook idempotency, share/realtime leaks
- Fixedqa32fail-closed WRITE (INSERT/UPSERT) + profiles PUT write-IDOR
- Fixedqa31missing-table 404 guard, pixel-write UUID gate, profiles-scoped team invite
- Fixedemailnever emit localhost app URL in production
- Fixedqa30bpixel-parent ownership dual-match (fix 500 on conversion child tables)
- Fixedqa30fail-closed default for unscoped REST tables + 14 more ownership rules + profiles self-scope
- Fixedqa299 verified user-visible defects across finance, crud/rls, MI gate, wizards, shim & analytics
- Fixedqa28scope ad-platform tables by account ownership (cross-tenant read) + repoint phantom-column filters
- Fixedqa27REST unknown-filter 400 + TikTok delete-all, api-v1 db-context, MCP session auth, daily-brief l10n
- Fixedmcp/apicampaign performance no longer 500s when called without a date range
- Fixedqa26-uistrip traceability suffix in remaining campaign-name display spots
- Fixedqa26-uiplan language tabs filter Google RSA ads, not-found log downgrade, i18n tails
- FixedauthQA follow-ups on the 2FA flow
- Fixedqa27SEO AI generator + Google Ads ad-group wizard return the array the frontend reads
- Fixedconsole-hygieneunconfigured Windsor is a warn, not a red console error on every page
- Fixedauthwire password-reset confirm flow + partner welcome-invite script
- Fixedqa25-uicampaign card display names, chat markdown, malformed-plan guards, i18n cleanup
- Fixedqa25-apiMCP db-context, async-polish safety, autopilot guard, prompt-injection hardening
- Fixedqa25shim contract — Meta A/B scaling + TikTok metrics-sync read the handler's real fields
- Fixedqa24battribution last-day-dropped + checkout returns error (not false success) on payment-init failure
July 2026
New 40 · Fixed 40- Newmarket-intelligenceNewsAPI + Media Cloud social-listening connectors
- Newmerchant-centerfull-catalog description rollout + in-panel "Fix descriptions" button
- Newmerchant-centerlocalized, code-stripped product descriptions (uk/ru/pl)
- Newmerchant-centerregister-gcp action to register the GCP project with the merchant account (Merchant API prerequisite)
- Newmerchant-centerdurable description remediation via Merchant API supplemental data source
- Newmerchant-centerin-system feed remediation groundwork (read + dry-run)
- NewlegalGoogle API Services Limited-Use + per-scope disclosure in Privacy
- Newgoogle-adsMerchant Center diagnostics panel in-system + de-SKU pack fix
- Newseo,metaGoogle-stealth SERP adapter + real Meta targeting search + real A/B scale
- Newseoreal rank tracking on our own basis — no paid SERP API
- Newmerchant-centerread MC account + product statuses in the system (Content API)
- Newjarvis-chatinject data-reality rules into both chat system prompts
- Newanalytics-factualityground all analytics numbers — no invented data
- Newad-qualityban SKU/model codes in ad copy + adult-misflag policy shield
- Newgoogle-adspaired credential-set fallback (dev token + own-project OAuth)
- Newgoogle-adsdeveloper-token fallback pool with persisted quota state
- Newanabel-uaДА (Франчайзинг Київ) Reach+Remarketing pair + Google quota circuit breaker
- Newgooglemax-fill matrix (RSA 15/4, PMax 15/5/5, RDA 5/5/15) + outlet landing restored
- Newmetacustomer-list custom audiences — create + hashed member upload
- Newmetamax-fill creative standard, ИМ segment, Audience Network off by default
- NewsyncMCC manager persistence, v24 recommendations fix, pixel/audience mirroring, REST wildcard fix
- NewadsShopping campaign pipeline, ad schedules, Meta pixel+audience ops
- Newadscampaign criteria writes, paused-QA update ops, Meta creative swap
- Newmetapaginate meta-list-pages business walk (proxy-safe)
- Newmetahinted early-exit page walk to find one brand page cheaply
- Newmetameta-list-pages — deterministic page picker for page-backed ads
- Newmetaresolve page-backed creatives via Business Manager pages
- Newmetaexponential backoff on Meta Graph rate-limit responses
- Newsmmfull media-fidelity posting across all 9 networks
- Newsmmcontent formats (stories/carousel/video) + native post deletion
- Newsmmopt-in enablement for direct publishing (SMM_DIRECT_PUBLISH_ENABLED)
- Newsmmat-rest encryption for social account tokens (opt-in)
- Newsmmpersist composer advanced options + recurring-post generation
- Newmarket-intelligenceDeerFlow Phase 3 — live web-search connector (fills the stub)
- Newadsdiscover ALL accessible Meta ad accounts (business hierarchy)
- Newmarket-intelligenceDeerFlow Phase 2 — wire agentic research into the pipeline
- Newmarket-intelligenceDeerFlow Phase 1 — sidecar service + compose wiring
- Newadsdedicated 3-hourly cabinet + access refresh scheduler
- Newsmmphase 6a — retry/backoff/429 for idempotent metrics GETs
- Newsmmphase 5a — best-time from real data, no fabrication
- Fixedcustomer-analyticsadapt UI to real server contract (RFM crash, CLV zeros, cohort heatmap)
- Fixedfinanceone canonical transaction-type vocabulary across all balance math
- Fixeddemoprod hardening — session GUC context, platform check, audience FK
- Fixedrestcount=exact returns rows AND count (PostgREST semantics)
- Fixedmerchant-centertypecheck (ds: any for linked field)
- FixedmetaMetaAdSetWizard referenced undeclared `data` (crashed campaign page)
- Fixedmerchant-centerresilient supplemental data-source create (Merchant API v1 shape fallback)
- Fixedmerchant-centeruse Merchant API v1 (v1beta discontinued 2026-02-28)
- Fixedlegalserve real privacy/terms HTML to crawlers (Google OAuth verification)
- Fixedgoogle-adsOAuth callback survives an expired browser session
- Fixednotifications,metakill notification 429 flood + harden Ad Set creation
- Fixedgoogle-adstoken pool state reads fresh from env (live-clearable, no stale cache)
- Fixedmeta-uploaderdeleted mirror campaigns no longer block reconciliation
- Fixedanabel-uaКР story asset points at real 954 vertical (900x1600), not 949
- Fixedmetaomit subtype/prefill on custom audience create by default
- Fixedgoogle-adshonor validate flags on ad/keyword/adgroup update-remove ops
- Fixedanabel-uaUkrainian-only ad copy, KMS limits, negatives, RSA paths
- Fixedmetafetch ad-image bytes via loopback to bypass edge self-fetch 403
- Fixedmetaupload ad image bytes to adimages instead of a Meta-fetched URL
- Fixedmetaaccount-scoped page lookup; don't cache empty page list
- Fixedsmmdrop X media.write scope from connect (breaks Free/Basic app auth)
- Fixedsmmaddress adversarial review findings for formats + native delete
- Fixedsmmremove fabricated default metrics from client monthly report
- Fixedmetaonly set campaign-level bid strategy when a campaign budget exists
- Fixedmetapin campaign-level bid strategy for non-value objectives
- Fixedadsmake manual account/access refresh fire-and-forget
- Fixedsecurityharden new MI/agent-skills/SMM/storage subsystems from prod verification
- Fixedmarket-intelligencededupe in-flight deep-analysis across trigger paths
- Fixedharden client campaign sync production qa
- Fixedenforce explicit client campaign qa selection
- Fixedbound production chaos qa waits
- Fixedstabilize production qa deploy gates
- Fixedenforce client-agnostic ad workflows
- Fixedexpose frontend alias permission repair
- Fixedstabilize production chaos qa budget
- Fixedclassify nonwritable frontend aliases
- Fixedtolerate blocked external edge health
- Fixedstabilize production qa gates
- Fixedharden production deploy and Valkiria OS admin
- Fixedverifyfour defects found by full-stack verification sweep
June 2026
New 40 · Fixed 40- Newexpand intelligence autopilot modules
- Newadd research intelligence module
- Newsurface ad provider full access readiness
- Newadd meta tracking diagnostics
- Newmarket-intelligenceintegrate external tools pipeline — crawl4AI, STORM, Stagehand, public APIs + pgvector
- Newmarket-intelligenceadd MI runner bootstrap QA artifact
- Newmarket-intelligenceadd staged rollout backfill controls
- Newmarket-intelligencewire operations notifications
- Newmarket-intelligencesurface run status and evidence
- Newmarket-intelligenceadd ai cost telemetry
- Newmarket-intelligencefeed evidence brief into campaigns
- Newmarket-intelligenceadd source-only ai context
- Newmarket-intelligenceadd evidence ledger builders
- Newmarket-intelligenceadd compatibility writers
- Newmarket-intelligenceprocess queued mi jobs
- Newmarket-intelligencequeue quick query jobs
- Newmarket-intelligencequeue report generation jobs
- Newmarket-intelligenceadd job idempotency enqueue
- Newmarket-intelligenceadd stuck job recovery
- Newmarket-intelligenceadd disabled runner loop
- Newmarket-intelligenceadd job claim rpc
- Newmarket-intelligenceadd sanitized audit events
- Newmarket-intelligenceadd parser sandbox limits
- Newmarket-intelligenceadd raw snapshot metadata builder
- Newmarket-intelligenceguard internal scraper fetches
- Newmarket-intelligenceadd guarded fetch utility
- Newmarket-intelligenceexpose source registry diagnostics
- Newmarket-intelligenceadd source adapter registry
- Newmarket-intelligenceadd execution foundation schema
- Newenhance ad and market intelligence workflows
- Newharden ad platform production readiness
- Newadd activation evidence intake plan
- Newexpand mcp ad provider surface
- Newexpand ad provider approval dossiers
- Newadd professional campaign decision scorecards
- Newexpand professional ad metrics contract
- Newship production qa and meta leads
- Newfinalize quture report artifacts and skills governance
- Newadd source-backed report navigation and translations
- Newenforce senior campaign audience intelligence
- Fixedhelpstop tutorial re-render flicker after pressing "Next"
- Fixedsearchkeep command-dialog placeholder clear of the close button
- Fixedusersalign row checkboxes as a real table column + fix RU role header
- Fixeduiresponsive overflow + corrupted notification i18n (QA pass)
- Fixedkeep legacy settings integrations route authenticated
- Fixedreset ad provider status inflight cache
- Fixeddedupe ad provider status checks
- Fixedlocalize dashboard onboarding skip
- Fixedkeep public nav sign-in hover readable
- Fixedrestore user systemd for production runner
- Fixedkeep production api launch single owner
- Fixedprevent duplicate production api launchers
- Fixedretry transient db pool acquisition
- Fixedharden production qa deploy gates
- Fixedresolve production npm path validation
- Fixedvalidate npm in production update script
- Fixedaccept externally blocked research claims
- Fixedrequire research retention bootstrap
- Fixedadd research intelligence tab translations
- Fixedorder market intelligence server migrations
- Fixedavoid production qa proxy port collisions
- Fixedrefresh provider external blocker guidance
- Fixedpublish frontend alias blocker diagnostics
- Fixedharden frontend i18n and provider status refresh
- Fixedlocalize russian sidebar labels
- Fixedrepair frontend i18n and provider loading
- Fixedlocalize meta tracking diagnostics
- Fixedguard settings security date formatting
- Fixedapply market intelligence schema on api startup
- Fixedharden production browser qa routes
- Fixedallow runner local release proof fallback
- Fixedbudget chaos qa transient navigation
- Fixedguard chaos qa context creation
- Fixedbudget chaos qa navigation timeouts
- Fixedharden production chaos qa runner
- Fixedstabilize production qa proxy diagnostics
- Fixedstrip qa proxy origin for production api
- Fixedpublish production qa artifacts to public roots
- Fixedwait for adops registry in production qa
- Fixedstabilize production browser qa api probes
May 2026
New 18 · Fixed 40- Newharden jarvis campaign workflow
- Newadd jarvis campaign workflow
- Newexpose agent provider launch status
- Newadd agent campaign provider deployment
- Newadd module skill profiles
- Newwire agent skills into AI runtime
- Newrequire explicit spend enable confirmation
- Newwire google child write mutates
- Newwire meta ads write paths
- Newadd safe google ads campaign updates
- Newadd safe google ads campaign create
- Newfinalize ad platform fallback readiness
- Newadd Google and Meta account OAuth login
- Newextend OAuth domains for main Valkiria host
- Newsupport main Valkiria OAuth domain
- Newsync Google Ads accessible accounts
- Newadd Meta app review production test suite
- Newadd aggregator fallback controls
- Fixedhonor agent launch status
- Fixedreuse existing agent provider campaigns
- Fixedconvert agent budgets to provider currency
- Fixedprefer branded ad account matches
- Fixedresolve shared ad accounts for agent deploy
- Fixedlog agent ad account resolution
- Fixedtolerate ad account schema drift
- Fixedcomplete agent deployment persistence
- Fixedserialize provider json payloads
- Fixedrepair moderation trigger defaults
- Fixedset db auth context for requests
- Fixedserialize json crud payloads
- Fixedadd deterministic agent fallback
- Fixedread connected ad account names
- Fixedalign conversion queue schema
- Fixedtolerate missing meta notification settings
- Fixedhandle mixed id types in data sync QA
- Fixedlighten header finance balances
- Fixedrun admin browser smoke with admin auth
- Fixedharden frontend webroot deployment
- Fixeddeploy frontend to ispconfig webroot
- Fixedclean stale converted migrations
- Fixedaccept modern uuid ids in write resolvers
- Fixedgate google meta write aliases
- Fixedpersist google campaigns without conflict constraint
- Fixednormalize production write script args
- Fixedskip removed google qa candidates
- Fixeddefault meta adset end time for lifetime budgets
- Fixedrespect meta campaign budget mode
- Fixedinfer meta adset delivery defaults
- Fixedsync meta campaigns for write flows
- Fixedremove google ads campaigns with mutate remove
- Fixedguard google ads writes to synced campaigns
- Fixedstore google ads campaign ids as text
- Fixedreuse stored provider tokens for validation
- Fixedinclude meta campaign budget sharing flag
- Fixedpersist meta ad account ids as text
- Fixedrefresh expired google ads tokens
- Fixedreturn setup state for tiktok oauth
- Fixedrestore superadmin without audit context
Want to receive notifications about new updates?
Subscribe to our newsletter to stay informed about the latest changes.