v0.1.6
What's Changed
- test(auth): cover per-IP brute-force throttling and rate-limit fail-open by @VincentShipsIt in #2314
- fix(app): render the workflow inspector on real Automate routes by @VincentShipsIt in #2320
- feat(auth): signal rate-limit store degradation instead of failing open silently by @VincentShipsIt in #2321
- refactor(app): rename Research module to Discover by @VincentShipsIt in #2318
- fix(ci): shard changed-coverage runs and stop the budget cancelling the job by @VincentShipsIt in #2326
- fix(auth): harden rate-limit store observability and Redis reconnection by @VincentShipsIt in #2329
- refactor(app): Analytics owns all analytics by @VincentShipsIt in #2315
- refactor(app): rename orchestration route and workflows config to Automate by @VincentShipsIt in #2316
- refactor(app): rename Posts module to Publish (#2311) by @VincentShipsIt in #2317
- fix(ci): stage coverage shards outside the hidden namespace by @VincentShipsIt in #2330
- fix(api): stop RunsController shadowing AgentRunsController on /runs by @VincentShipsIt in #2335
- chore(agents): replace agent-def example dialogs with one-line scope descriptions by @VincentShipsIt in #2336
- feat(app): dedicated artifact editor pages for focused content editing by @VincentShipsIt in #2323
- feat(app): give content runs a reachable index page by @VincentShipsIt in #2331
- refactor(app): merge Editor into Studio as the Edit surface by @VincentShipsIt in #2319
- refactor(app): retire standalone Studio one-off tabs — Agent-first media generation by @VincentShipsIt in #2325
- refactor(app): retire Compose module and posts/composer — Agent-first writing by @VincentShipsIt in #2324
- feat(license): Ed25519-signed license keys (#2327) by @VincentShipsIt in #2333
- chore(agents): trim always-loaded context, fix rule scoping, forbid local Vercel CLI by @VincentShipsIt in #2337
- chore(agents): remove personal operator memory from public monorepo by @VincentShipsIt in #2338
- fix: continuous QA train (Fleet rename, settings density, agent chrome) by @VincentShipsIt in #2339
- fix: boil-ocean P0 release batch by @VincentShipsIt in #2342
- fix(ui): drop dead dashboard MetricCard breaking every CI job by @VincentShipsIt in #2351
- fix(ci): unblock merge train gates by @VincentShipsIt in #2355
- chore: ignore Python cache directories by @VincentShipsIt in #2349
- feat(signup): background brand + harness prefill at signup by @VincentShipsIt in #2347
- fix(brands): resolve brand logo/banner from Asset rows, not dead Brand columns by @VincentShipsIt in #2348
- fix(analytics): resolve leaderboard avatars from real sources, not dead aliases by @VincentShipsIt in #2352
- fix(brands): populate logo/banner/reference asset relations on brand responses by @VincentShipsIt in #2353
- feat(agent): composer mode dropdown + single model catalog by @VincentShipsIt in #2350
- fix(ci): repair post-train checks by @VincentShipsIt in #2356
- fix: audit findings — tenant scoping, guard coverage, batch isolation, dispatch reclaim by @VincentShipsIt in #2368
- feat(agent): add format-aware artifact previews by @VincentShipsIt in #2367
- fix: stabilize local QA generation flows by @VincentShipsIt in #2366
- fix(ci): ignore historical gitleaks self-match blocking production deploys by @VincentShipsIt in #2372
- fix(auth): decouple signup prefill enqueue from user provisioning by @VincentShipsIt in #2374
- fix(brands): bound brand-kit asset reads and normalize CDN URLs by @VincentShipsIt in #2375
- test(api): align remaining canonical migration fixtures by @VincentShipsIt in #2376
- feat(agent): real model catalogue with per-round, actual-model credit billing by @VincentShipsIt in #2369
- fix(api): restore green master after the #2366/#2369 merge train by @VincentShipsIt in #2392
- fix(prisma): drop phantom reply_bot_configs.status write breaking fresh-DB migrations by @VincentShipsIt in #2396
- fix(social-inbox): accurate campaign transition conflicts + clock-controlled lease tests by @VincentShipsIt in #2393
- fix(api): reject array webhook bodies and omit undefined normalized writes by @VincentShipsIt in #2394
- fix(e2e): align nightly frontend specs with current shell contract by @VincentShipsIt in #2401
- chore(api): stop committing generated OpenAPI spec by @VincentShipsIt in #2379
- feat(desktop): boot canonical app shell with Genfeed Connect sign-in by @VincentShipsIt in #2381
- spike(redis): make Redis optional so the API can boot single-process (#2382) by @VincentShipsIt in #2397
- chore(models): set the required Telegram notification flag in test fixtures by @VincentShipsIt in #2403
- fix(cache): fail open instead of hanging when Redis is unreachable by @VincentShipsIt in #2404
- chore(memory): require an open-PR search before starting work by @VincentShipsIt in #2408
- fix(seo): correct website crawl contracts by @VincentShipsIt in #2398
- fix(docs): restore crawl and canonical metadata by @VincentShipsIt in #2399
- feat(analytics): make PostHog the single tracker, drop GA/GTM and ad-pixel stack by @VincentShipsIt in #2390
- feat(storage): root desktop local storage at the Electron userData directory by @VincentShipsIt in #2391
- fix: harden local QA agent, analytics scope, and org Telegram flag by @VincentShipsIt in #2405
- feat(website): self-hosted SEO audit gate + clear the whole Ahrefs backlog by @VincentShipsIt in #2389
- feat(onboarding): agent-first Community onboarding by @VincentShipsIt in #2400
- build(ci): typecheck backend spec files behind a ratcheting baseline by @VincentShipsIt in #2409
- fix(ci): classify use-cases marketing route by @VincentShipsIt in #2410
- fix(ci): align desktop QA workflow contract by @VincentShipsIt in #2411
- fix(ci): reconcile cumulative full-suite contracts by @VincentShipsIt in #2412
- fix(ci): resolve editor fixture type debt by @VincentShipsIt in #2413
- fix(ci): isolate spec typecheck workspaces by @VincentShipsIt in #2414
- fix(docs): drop duplicate description frontmatter key breaking the docs build by @VincentShipsIt in #2415
- feat(analytics): track public ecosystem journeys by @VincentShipsIt in #2421
- test(auth): make provisioning non-blocking assertion deterministic by @VincentShipsIt in #2424
- fix(api): reject bulk model patches that omit the organization scope by @VincentShipsIt in #2425
- fix(website): harden SEO audit crawl, entity decoding, and baseline identity by @VincentShipsIt in #2426
- fix: persist install user, reset conversation on brand switch, guard jsonb merge (#2418) by @VincentShipsIt in #2427
- fix(config): harden signed-license package boundaries by @VincentShipsIt in #2428
- fix(cli): register organizations command, drop baked-in Fleet IP, backfill changelog by @VincentShipsIt in #2437
- feat(tools): resolve curated action surface asymmetries by @VincentShipsIt in #2441
- fix(cli): point article generation at POST /articles/generations by @VincentShipsIt in #2442
- refactor(mcp): derive example from the registry, share resources, drop stdio by @VincentShipsIt in #2447
- chore(brand-context): delete dead RAG scaffolding by @VincentShipsIt in #2462
- fix(agent): reconnect banner as warning card by @VincentShipsIt in #2468
- fix(agent): get_current_brand uses scoped brandId by @VincentShipsIt in #2470
- feat(auth): admin user impersonation via Better Auth admin plugin by @VincentShipsIt in #2430
- feat(router): #2422 Phase C registry-backed model resolution by @VincentShipsIt in #2479
- fix(mcp): send article generation fields the API actually declares by @VincentShipsIt in #2454
- docs(memory): stop asserting a catalog CI workflow that does not exist by @VincentShipsIt in #2463
- docs(api): document gf_ API key authentication and add a key walkthrough by @VincentShipsIt in #2438
- fix(articles): honour the per-request generation model by @VincentShipsIt in #2453
- docs(skills): add product skills install and authoring guide by @VincentShipsIt in #2435
- refactor(workflows): burn top as-never hotspots by @VincentShipsIt in #2475
- refactor(types): WorkflowExecutionStatus Prisma SCREAMING_SNAKE by @VincentShipsIt in #2474
- refactor(types): IngredientStatus Prisma SCREAMING_SNAKE by @VincentShipsIt in #2473
- fix: 2026-08-06 QA train — batch status enum mapping, agent composer, UI pass by @VincentShipsIt in #2466
- fix(cli): send brandId for image and video generation by @VincentShipsIt in #2433
- fix(cli): send the query params the performance API actually reads by @VincentShipsIt in #2436
- feat(cli): derive login endpoints from the active profile by @VincentShipsIt in #2446
- refactor(cli): remove private fleet control-plane surface from the public CLI by @VincentShipsIt in #2449
- docs(cli): add CLI reference page and fix README gaps by @VincentShipsIt in #2434
- fix(cli): remove stray merge marker from README by @VincentShipsIt in #2481
- refactor(brand-context): unify token budget across assemblers + full voice object in workflow brandContext by @VincentShipsIt in #2480
- fix(api): default soft-delete scoping across the filter-driven service surface by @VincentShipsIt in #2429
- refactor(types): BatchStatus SCREAMING_SNAKE + as-never ratchet by @VincentShipsIt in #2467
- refactor(api): burn as never in batch/outreach/models/trends by @VincentShipsIt in #2477
- refactor(types): AgentRunStatus Prisma SCREAMING_SNAKE by @VincentShipsIt in #2471
- feat(contexts): add pgvector retrieval foundation by @VincentShipsIt in #2465
- feat(models): seed the unified model registry and read the agent picker from it by @VincentShipsIt in #2469
- feat(models): discover fal models into the registry as drafts by @VincentShipsIt in #2476
- feat(models): expose a public model catalog endpoint by @VincentShipsIt in #2478
- feat(agent): #2422 Phase D registry-only model picker by @VincentShipsIt in #2472
- ci(tools): report curated action catalog changes on pull requests by @VincentShipsIt in #2452
- feat(ads-gateway): expose ad and ad set insights across every ads platform by @VincentShipsIt in #2464
- feat(mcp): return real analytics for article and image content by @VincentShipsIt in #2448
- fix(agent): point agent CTAs at live routes (/automate/workflows, discover) by @VincentShipsIt in #2455
- feat(webhooks): emit generation and workflow execution events by @VincentShipsIt in #2456
- fix(onboarding): resolve PR #2400 review follow-ups (#2416) by @VincentShipsIt in #2431
- feat(tools): fold uncataloged agent tools into the curated catalog by @VincentShipsIt in #2450
- feat(agent): reach TikTok Ads from agent research and MCP insight tools by @VincentShipsIt in #2451
- fix(ci): restore green master after the 2026-08-07 merge train by @VincentShipsIt in #2482
- fix(agent): repair the five stale package specs red on master by @VincentShipsIt in #2495
- test: realign specs with the 2026-08-07 merge train by @VincentShipsIt in #2483
- fix: compare persisted statuses against enum members, not dead lowercase literals by @VincentShipsIt in #2484
- chore(prisma): drop orphan WorkflowStatus enum that collides with the domain enum by @VincentShipsIt in #2492
- fix(app): name TikTok Ads in the ads research connect strip by @VincentShipsIt in #2493
- fix(ci): surface dormant test lanes in the Tests Gate summary by @VincentShipsIt in #2494
- fix(app): remove dead workspace activity task-table path by @VincentShipsIt in #2505
- refactor(types): TrainingStage + SubscriptionStatus Prisma SCREAMING_SNAKE by @VincentShipsIt in #2506
- fix(enums): Platform ↔ Prisma CredentialPlatform mapper (residual #2504) by @VincentShipsIt in #2507
- feat(agent): T3/Codex conversation density (#2502) by @VincentShipsIt in #2508
- fix(tests): assert the label the error-debug modal actually renders by @VincentShipsIt in #2509
- perf(prisma): add hot-path indexes for LinkClick, CreditTransaction, Member by @VincentShipsIt in #2520
- perf(files): cap concurrent FFmpeg processes with a process-wide semaphore by @VincentShipsIt in #2521
- perf(api): single-write API-key auth and atomic rate limiting; 429 on limit by @VincentShipsIt in #2522
- perf(api): enforce server-side pagination on HTTP list endpoints by @VincentShipsIt in #2523
- perf(cache): scope paginated-query cache tag per collection by @VincentShipsIt in #2524
- fix(qa): interactive agent shell, review/discover polish, publish overview by @VincentShipsIt in #2485
- perf: batch of audit easy wins — indexed lookups, input caps, O(n) queues by @VincentShipsIt in #2525
- fix(ci): restore master green after the 16-PR merge train by @VincentShipsIt in #2526
- chore(prisma): drop seven orphan enum types with no backing column by @VincentShipsIt in #2531
- feat(enums): domain enums for un-mirrored Prisma enums (no drift) by @VincentShipsIt in #2532
- fix(enums): OnboardingType uses Prisma labels by @VincentShipsIt in #2536
- feat(i18n): cookie-carried locale resolution and message catalogs by @VincentShipsIt in #2534
- fix(enums): TrendNotificationFrequency uses Prisma labels by @VincentShipsIt in #2539
- fix(integrations): keep Prisma SCREAMING labels in the API wire format by @VincentShipsIt in #2546
- test(batch-generation): lock credential resolution edge cases (#2499) by @VincentShipsIt in #2544
- feat(batch-generation): resume stranded batches via BullMQ (#2501) by @VincentShipsIt in #2541
- fix(ci): restore master — integration status casing and type-assertion ratchet by @VincentShipsIt in #2547
- fix(guards): type-assertion ratchet ignores comments and strings by @VincentShipsIt in #2540
- fix(enums): register ReviewDecision in the Prisma-parity ratchet by @VincentShipsIt in #2542
- fix(enums): QualityStatus uses Prisma labels by @VincentShipsIt in #2537
- fix(enums): LinkCategory + Bookmark enums use Prisma labels, not Platform ids by @VincentShipsIt in #2529
- refactor(enums): SCREAMING labels for BrandInterviewStatus by @VincentShipsIt in #2535
- fix(enums): GenerationPriority uses Prisma labels; map to router vocabulary by @VincentShipsIt in #2545
- fix: ArticleStatus.PUBLISHED metadata assertions + PostStatus casing in E2E post fixtures by @VincentShipsIt in #2530
- fix(agent): charge media-aware batch credits by @VincentShipsIt in #2528
- fix(qa): interactive polish — agent, discover, publish, library by @VincentShipsIt in #2538
- feat(i18n): store and sync the locale preference by @VincentShipsIt in #2548
- fix(integrations): restore green master — SCREAMING_SNAKE IntegrationStatus in bot-normalize by @VincentShipsIt in #2527
- fix(ci): consolidate the four red-master CI branches into one by @VincentShipsIt in #2556
- fix(e2e): declare @genfeedai/enums at the root so Playwright can resolve it by @VincentShipsIt in #2557
- fix(api): restore the Spec Typecheck ratchet on the enum nominal boundary by @VincentShipsIt in #2564
- fix(tests): restore the green test matrix on master by @VincentShipsIt in #2562
- fix(ui): stop rendering SCREAMING_SNAKE enums in URLs and labels by @VincentShipsIt in #2560
- fix(ui): key status badges off the Prisma enum labels (rebase of #2555) by @VincentShipsIt in #2565
- fix(ingredients): route every S3 key and CDN path through categoryToPlural (rebase of #2563) by @VincentShipsIt in #2566
- fix(ci): master pushes run the affected workspace-group tests + enum-drift repairs by @VincentShipsIt in #2567
- fix(credits): make usage-metric queries sargable for the org/deleted/category/createdAt index by @VincentShipsIt in #2568
- fix(api): route the four remaining category path derivations through categoryToPlural by @VincentShipsIt in #2569
- fix(guards): scan template-literal interpolations in the type-assertion ratchet by @VincentShipsIt in #2570
- fix(app): stop silent 10-row truncation on unpaginated list callers by @VincentShipsIt in #2571
- refactor(trainings): confirm status→stage semantics and use TrainingStage enum members by @VincentShipsIt in #2573
- fix(agent): mentions endpoints answering non-mentions JSON no longer blank /automate/* by @VincentShipsIt in #2575
- fix(e2e): green core-loop E2E — composer crash, execution wire drift, cache keying by @VincentShipsIt in #2576
- fix(ci): master pushes get a conclusive Tests Gate and a red-trunk tracker issue by @VincentShipsIt in #2580
- fix(prisma): canonicalize status casing on content_drafts and campaign_targets by @VincentShipsIt in #2578
- fix(cli): article generation brand support + batch brandId contract by @VincentShipsIt in #2579
- fix(batch): durable, alert-backed reconciliation for settlement shortfalls by @VincentShipsIt in #2581
- fix(api): map paused/cancelled/publishing release statuses to valid PostStatus values by @VincentShipsIt in #2582
- perf(cache): replace pattern SCAN invalidation with scoped tag sets by @VincentShipsIt in #2583
- fix(app): use plain post language for Publish CTAs and calendar copy by @VincentShipsIt in #2585
- fix(api): apply the publicationState filter posts list pages already send by @VincentShipsIt in #2602
- fix(api): attachment posts inherit the parent's legacy status, not its target state by @VincentShipsIt in #2601
- chore(schedules): remove dead content-repurposing stub pipeline by @VincentShipsIt in #2587
- fix(sync): lossless composite cursor for desktop manifest sync by @VincentShipsIt in #2586
- feat(publish): surface failed posts with dedicated view, status chips, and manual retry by @VincentShipsIt in #2589
- fix(app): Follow sources selection + publish review table queue by @VincentShipsIt in #2572
- fix(trunk): repair red master after the publish content-desk merge wave by @VincentShipsIt in #2656
- feat(publish): render PlatformPreview in review rail and compose modal by @VincentShipsIt in #2651
- fix(agent): wire SET_WORKFLOW_SCHEDULE tool to the real workflow schedule path by @VincentShipsIt in #2667
- fix(brands): honor publishing-defaults cadence in recurring content scheduling by @VincentShipsIt in #2668
- fix(app): wire review table empty state by @VincentShipsIt in #2614
- fix(ui): polish ModelSelector residuals by @VincentShipsIt in #2616
- test(agent): expand archived UiAction coverage by @VincentShipsIt in #2617
- test(app): cover Publish overview and Context handoff by @VincentShipsIt in #2619
- feat(app): explain review filter auto-broaden by @VincentShipsIt in #2620
- fix(agent): restore archived thread row contrast by @VincentShipsIt in #2621
- fix(api): backfill invalid post status values by @VincentShipsIt in #2623
- chore(app): delete unmounted settings modal by @VincentShipsIt in #2635
- fix(redis): split BullMQ producer and worker reconnect profiles by @VincentShipsIt in #2636
- feat(i18n): resolve activity copy through catalog by @VincentShipsIt in #2638
- feat(agent): restore recent thread on bootstrap by @VincentShipsIt in #2648
- refactor(app): delete legacy shell compatibility by @VincentShipsIt in #2649
- fix(publish): enforce catalog caption limits at publish time with structured non-retryable errors by @VincentShipsIt in #2652
- feat(publishing): expose Substack import feed by @VincentShipsIt in #2666
- feat(publish): add multi-type Posts library by @VincentShipsIt in #2624
- feat(publish): improve calendar density and failure recovery by @VincentShipsIt in #2632
- refactor(app): deduplicate ReviewPanelItem type by @VincentShipsIt in #2618
- feat(publish): preview selected channels before send by @VincentShipsIt in #2628
- test(agent): restore exhaustive registry filter assertions by @VincentShipsIt in #2615
- refactor(app): relocate newsletter deep link by @VincentShipsIt in #2627
- feat(publish): discard whole review batches by @VincentShipsIt in #2630
- feat(i18n): add untranslated-string CI ratchet by @VincentShipsIt in #2637
- feat(publishing): add Beehiiv execution modes by @VincentShipsIt in #2650
- fix(publish): calendar channel icons, home schedule strip, PENDING badge by @VincentShipsIt in #2654
- fix(ci): stop Spec Typecheck re-fingerprinting when a Prisma model is added by @VincentShipsIt in #2674
- fix(i18n): resolve operational home copy through the catalog by @VincentShipsIt in #2675
- fix(merge-train): batch-integrate eight publish/agent PRs into one merge by @VincentShipsIt in #2683
- feat(publish): filter Pipeline navigation through Posts by @VincentShipsIt in #2633
- fix(analytics): restore PostHog pageview tracking by @VincentShipsIt in #2680
- feat(website): add /download with OS detection and live release lookup by @VincentShipsIt in #2682
- fix(docs): narrow the PostHog key before init by @VincentShipsIt in #2685
- feat(publish): repurpose a post to another channel — deterministic + agent modes (#2588) by @VincentShipsIt in #2657
- feat(posts): split visibility from lifecycle by @VincentShipsIt in #2669
- feat(publish): consolidate publish list projection by @VincentShipsIt in #2670
- fix(ci): repair red trunk after the publish/posts merge train by @VincentShipsIt in #2694
- chore(ci): scope Trivy to the OS layer and skip vendored lockfiles by @VincentShipsIt in #2691
- test(api): stabilize module graph ratchets by @VincentShipsIt in #2705
- chore(cli): release 0.6.0 by @VincentShipsIt in #2692
- feat(desktop): stamp the release tag into the build and ship a Homebrew cask by @VincentShipsIt in #2684
- fix(security): close CodeQL input-handling findings by @VincentShipsIt in #2693
- fix(ci): grant nested issue tracker permission by @VincentShipsIt in #2690
- fix(app): bind seeded composer prompts to the selected brand by @VincentShipsIt in #2681
- feat(agent): add conversation turn minimap by @VincentShipsIt in #2695
- feat(monitoring): add CloudWatch operational baseline by @VincentShipsIt in #2688
- refactor(posts): retire orphaned content drafts by @VincentShipsIt in #2671
- feat(review): unify decision vocabulary by @VincentShipsIt in #2672
- test: raise unit-test coverage to 80%+ lines and functions across packages and server tier by @VincentShipsIt in #2673
- fix(ci): flatten merged master checks by @VincentShipsIt in #2707
- fix(lifecycle): close out status vocabulary leftovers by @VincentShipsIt in #2711
- chore(memory): require a Priority on every Project #12 card by @VincentShipsIt in #2709
- fix(e2e): realign nightly specs with post-merge-train publish contracts by @VincentShipsIt in #2712
- fix(security): keep auth tokens and invitee PII out of logs by @VincentShipsIt in #2717
- fix(security): scope tenant writes on skill, brand, and publish paths by @VincentShipsIt in #2719
- fix(ci): let a green master push actually close its failure tracker by @VincentShipsIt in #2710
- fix(ui): close out the qa/local-bugfix audit leftovers by @VincentShipsIt in #2713
- fix(security): close CodeQL findings, pin 9 transitive CVEs, fix Dependabot lockfile coverage by @VincentShipsIt in #2718
- fix(qa): app sweep — agent UX + local image gen completion by @VincentShipsIt in #2716
- fix(e2e): align failed post schedule heading by @VincentShipsIt in #2729
- fix(ci): reuse available server image for releases by @VincentShipsIt in #2732
- fix(release): keep draft until SaaS succeeds by @VincentShipsIt in #2734
- fix(website): bound desktop release lookup and follow pagination (#2706) by @VincentShipsIt in #2730
- fix(app): defer agent bootstrap redirect until authorization resolves (#2702) by @VincentShipsIt in #2733
- chore(deps): consolidate dependency and workflow action upgrades by @VincentShipsIt in #2731
- fix(ci): stop Gitleaks failing every Dependabot PR by @VincentShipsIt in #2736
- fix(security): stop trusting the Replicate webhook signature as proof of origin by @VincentShipsIt in #2735
- fix(infra): grant deploy monitoring permissions by @VincentShipsIt in #2740
- fix(deploy): allow operations topic tag inspection by @VincentShipsIt in #2741
Full Changelog: v0.1.5...v0.1.6