Changelog
What changed, and when.
Every release of AdvisorPPC, newest first. New capabilities, behaviour changes, fixes and security work. Machine-readable at /changelog.json.
Unreleased
Changed
One price line, everywhere.
pricing.tsnow also projects a price-line manifest (backend/app/knowledge/price_line.json) that the backend, the billing page and the MCP connectors read, so included accounts, seats and add-on prices are enforced from the same numbers the pricing page prints.- Extra ad accounts are priced on a dated schedule stated everywhere the same way: one rate for accounts added through 30 September 2026 and the standing rate for accounts added from 1 October 2026 (both numbers live only in
pricing.ts); an account added at the earlier rate keeps it. The half-off promo framing is gone. Needs the founder to create theadvisorppc_site_extra_account_intro_monthlyStripe price; checkout refuses to mint until it resolves at the advertised amount. - The account-change rule: three free account changes per included account, counter always visible on Connectors; from the next new ad account the change is a billable extra managed account. Confirm-then-charge: the API answers 409
connector_account_change_billablewith the price, the UI asks for a click, andPOST /api/stripe/addons/extra_accountadds the subscription item (prorated, invoiced now). Purchased add-ons raise the account and seat caps (tenant_subscriptions.extra_accounts/extra_seats, written by the webhook). Migrationd9e0f1a2b3c4. - The price gate now hunts figures from $40 and the manifest is a gated generated artifact. Gates: price-gate,
test:gate(pricing tests added),pytest tests/test_connector_entitlements.py tests/test_price_line.py.
- Extra ad accounts are priced on a dated schedule stated everywhere the same way: one rate for accounts added through 30 September 2026 and the standing rate for accounts added from 1 October 2026 (both numbers live only in
Added
A workspace for SEO and AI search: decide what to change, edit it, compare versions, schedule the work and export it.
- Gravity GEO package B per the frozen
gravity-geo/ARCHITECTURE.md, built over the facts the Gravity MCP returns. Gates at build time:tsc --noEmitclean,test:gateclean,pytest tests/test_geo_router.py8 passed. The backend baseline is red at merge-base (53 failures); the gate method is zero NEW failing test IDs, not green. #249
- Gravity GEO package B per the frozen
Changed
The Shield connector page now explains Shield's own Free / Pro / Agency tiers and links to Shield's pricing.
/connectors/shielddescribes click scoring, Google Ads IP exclusions and the Bing paste list; a catalog-drivenpricingHrefCTA opensshield.advisorppc.com/pricing. Shield rungs are deliberately NOT added to the main/pricingladder, which sells AI managers. #137
Added
Reset your own password without contacting support. #244
Fixed
Logged-out visitors can buy the Google Suite plan instead of hitting a wall at checkout. #245
Added
The Google Suite plan is on sale. #230
Added
Support answers the phone, with the same brain and the same guardrails as chat. #173
Live sales metrics on Overview: ad spend, paid vs organic, pending approvals, auto-refreshing. (#189, #188)
A secure AdvisorPPC Telegram channel, with the Mini App hosted on AdvisorPPC. (#222, #224, #223)
Super-admin DGX model lanes in chat. #209
Changed
All 235 media files moved to R2 and off the origin, with every
/brandsource routed through the CDN resolver. (#212, #213, #214)Editorial pass on all 98 blog posts, plus real image and media gates. #210
Two daily Field Notes through Aug 26. #208
Fixed
Dark mode no longer forces light artwork: the multiply plate is neutralised on the homepage hero and elsewhere, and art keeps white with rounded corners. (#215, #216, #217)
The Telegram logo keeps its
idot and drops the top arc and circle. (#227, #226)The Google Partner footer aria-label loses its em dash. #211
Alembic heads #189 and #224 each created are merged. #225
Added
An in-app Billing page at
/app/billing. #171Every support conversation is remembered, and the owner can read it. #164
A context budget orchestrator: a 256k ceiling with dynamic per-turn allocation. #191
Changed
Chat pipeline: speed, exposure hardening and manual write-gate enforcement. #151
Fixed
Chat turns no longer block on
connector_account_locks, and Google consent stays native without status-refresh lock starvation. (#148, #140)One unreadable Google service no longer blanks the whole chat context. #144
The site's customers are signed into the MCP runtime, and the runtime is told which plan a workspace is on. (#168, #152)
A hyphenated ad account is read under its canonical id, and a target CPA can steer pacing. #174
A scheduled run targets the workspace's managed accounts. #159
The authorizing Google account is captured and shown on the card. #146
Enter no longer eats IME messages, and loads stop looking blank. #149
Added
Field Notes stills and inline figure nodes. #136
Changed
Plan-gate refusals are named and shown above the composer. #128
Fixed
Dashboard, chat connect, billing, security and trust corrections. #134
The scaling page meta description is back inside 160 characters. #135
Added
Superuser plan control for tenants. #118
Added
Account agents in chat. #107
Fixed
Dark marketing media fallback, and the Grok dark-marketing surface. (#104, #103)
Field Notes H2 and FAQ structure. (#100, #99)
Added
Gravity runs on live data. #92
Fixed
Startup recovery and RLS. #89
Meta dashboard first-recovered state. #88
Added
The brand-green :30 film is the home hero. #ac246f3
Video files, :30 TV spots, an
/adslibrary and six trade blog heroes. #c1776e5
Added
Chat data visibility, a PDF rail, the Portfolio Manager orchestrator, and Fable / Opus 5 models. #b0b757c
Added
Google Ads Ad Scheduling post. #6a04c8b