skip to content →
[ CHANGELOG / FIELD_LOG ]Auto-recorded on merge to main

What we shipped.

One line per merged pull request, dated by merge day. Generated by the same automation that pushes the code, so the only delay between "we shipped it" and "it appears here" is a CI run.

What changed most recently in VectraSEO?

The changelog lists the latest merged pull requests by release date, with the newest shipped change first and older releases kept in the project archive.

Last updated·373 shipped changes across 57 releases

last_update2026-07-12
total_releases57
total_changes373
elapsedtoday
[ RELEASE / 2026-07-12 ]
2 changesSunday, July 12, 2026
  1. PR_1103
    CHANGEDfix(worker): log expected publish gate-holds as warning, not error

    A publish_post_failed error was paging the tracker as high-severity from the PipelineWorker Lambda:

    @cigan1
  2. PR_1101
    CHANGEDfix(logging): suppress bs4 XMLParsedAsHTMLWarning escalated as CloudWatch error

    A XMLParsedAsHTMLWarning from BeautifulSoup was showing up as a high-severity error in the error tracker, sourced from the PipelineWorker Lambda:

    @cigan1
[ RELEASE / 2026-07-11 ]
8 changesSaturday, July 11, 2026
  1. PR_1099
    CHANGEDfix(dataforseo): retry transient 5xx/429/network faults in HTTP client

    Adds transient-fault retry to the DataForSEO HTTP client (_post), the single choke point behind every DataForSEO call.

    @cigan1
  2. PR_1097
    CHANGEDperf(projects): batch + filter-scope project-list card enrichment

    The Projects list view (/projects) fanned out 6 per-project detail calls in onMounted over the full, unfiltered project list. Filtering (e.g. searching "DNS" → 1 of...

    @cigan1
  3. PR_1095
    CHANGEDfix(publish): enforce destination capability contract + structured 4xx learning; surface generate no-ops

    Two prod issues on proj_63b11d19aa2b4fd7 (publishing to publish.sendant.io):

    @cigan1
  4. PR_1094
    CHANGEDfeat(posts): monthly-post quota guardrail + Generate regression tests

    Follow-up to #1088 (which merged only the error-surfacing commit). This carries the rest of the Generate-button work that wasn't in that merge.

    @cigan1
  5. PR_1092
    CHANGEDfix(gsc): alias reserved words in live-probe re-bucket UpdateItem

    GSCMetricsRepository.apply_live_probe_bucket built its UpdateExpression as SET bucket = :b, severity = :s, …. Both bucket and severity are DynamoDB reserved words, s...

    @cigan1
  6. PR_1091
    CHANGEDprompts: answer-first intros, ban scene-setting filler, add comparison tables

    Two additive, cross-tenant content-quality improvements to the blog writer prompts (BLOG_POST_PROMPT and HYBRID_BLOG_POST_PROMPT), motivated by QA of the Steada tena...

    @cigan1
  7. PR_1090
    CHANGEDfeat(indexing): discovery-health findings + honest Indexing-API copy

    Turns the passive "not indexed" badge into actionable, Vectra-owned signal. All checks are deterministic and free — they read state we already have (no model calls, no extra GSC...

    @cigan1
  8. PR_1088
    CHANGEDfix(posts): surface Generate errors instead of failing silently

    Clicking the manual Generate Posts button on the posts page appeared to do nothing — no job, no new post, no error message.

    @cigan1
[ RELEASE / 2026-07-09 ]
1 changeThursday, July 9, 2026
  1. PR_1086
    CHANGEDfix: replace retired Gemini 2.5 Flash

    Production pipeline jobs fail with HTTP 404 because Google no longer serves models/gemini-2.5-flash. Google documents gemini-3.1-flash-lite as a GA migration path that aims...

    @cigan1
[ RELEASE / 2026-07-05 ]
2 changesSunday, July 5, 2026
  1. PR_1084
    CHANGEDFix secret separation boot guard

    Closes #1073

    @cigan1
  2. PR_1082
    CHANGEDfix: normalize custom_api cms_post_url to the declared canonical host

    When a project configures canonical_base_url, that's the public location VectraSEO already ships in the outgoing payload + JSON-LD. But CustomAPIAdapter stored whatever host...

    @cigan1
[ RELEASE / 2026-07-02 ]
3 changesThursday, July 2, 2026
  1. PR_1080
    CHANGEDfix: expand short meta descriptions on repair
    @cigan1
  2. PR_1078
    CHANGEDfix: repair post metadata with article context
    @cigan1
  3. PR_1076
    CHANGEDfix: keep recommendations available on page summary errors
    @cigan1
[ RELEASE / 2026-07-01 ]
1 changeWednesday, July 1, 2026
  1. PR_1074
    CHANGEDfeat: integrate DataForSEO market intelligence
    @cigan1
[ RELEASE / 2026-06-30 ]
2 changesTuesday, June 30, 2026
  1. PR_1071
    CHANGEDsecurity(ssrf): pin DNS resolver on CMS publish + guard sitemap fetch

    Closes two SSRF gaps that are still live on main. These came out of QA on the stale security/fix-critical-high-findings branch (~6 weeks / 1102 commits behind): most of that...

    @cigan1
  2. PR_1069
    CHANGEDfeat(autofix): orphan sweeper + cancel button + republish retry/error visibility (PR #1066 deferred)

    Ships the deferred items from PR #1066 (autofix_batch durability) plus the fix for today's prod-QA "Fix all" no-op finding. Two commits:

    @cigan1
[ RELEASE / 2026-06-29 ]
9 changesMonday, June 29, 2026
  1. PR_1066
    CHANGEDfix(autofix): durable autofix_batch — checkpoint/resume, deadline-aware continuation, dedup, idempotency

    A 17-fix "Fix all" on a live project (EchoThread, 2026-06-29) exceeded the 15-min Lambda budget. The pipeline FIFO message was redelivered 3× (maxReceiveCount=3), **ea...

    @cigan1
  2. PR_1063
    CHANGEDfix(affiliates): invite non-partners to apply instead of erroring

    QA against prod surfaced that a signed-in user who isn't a partner, navigating directly to /affiliates, saw only a bare red "Your account is not yet a partner." with no pa...

    @cigan1
  3. PR_1064
    CHANGEDfix(migration): hide create form when the feature flag is off

    QA against prod (where migration_monitor_enabled is dark) surfaced that /projects/:id/migration rendered a fully submittable "New migration" form above a red *"Migration...

    @cigan1
  4. PR_1061
    CHANGEDfeat(migration): Trestle P3 — post-launch verification monitor

    Closes the Trestle closed loop (epic #1056). Once a migration is live, the approved redirect map frozen in P2 becomes a contract: every old URL is verified against its a...

    @cigan1
  5. PR_1060
    CHANGEDTrestle P2 — staging validation + approval queue (draft→in_review→approved)

    Third phase of the migration monitor (epic #1056), on top of merged P0 (#1057) and P1 (#1059). Turns the free P1 draft map into an approved, frozen redirect set — th...

    @cigan1
  6. PR_1059
    CHANGEDfeat(migration): Trestle P1 — deterministic draft redirect map

    Second phase of the migration monitor, building on P0 baseline ingest (PR #1057, merged). Turns the baseline's old URLs + the new site's sitemap(s) into a **deterministic ol...

    @cigan1
  7. PR_1057
    CHANGEDfeat(migration): Trestle P0 — pre-migration baseline ingest (3rd monitor_type)

    Ships P0 of epic #1056 (Trestle — ecommerce migration redirect protection) as a third VectraSEO monitor species, monitor_type="migration", mirroring the AI-visibility moni...

    @cigan1
  8. PR_1054
    CHANGEDfeat(autofix): read the live page as source of truth, never overwrite edits

    One-click Auto-Fix / "Fix all" / Auto-Pilot previously patched VectraSEO's stored S3 snapshot and republished it — which could silently **squash a customer's out-of-band edi...

    @cigan1
  9. PR_1052
    CHANGEDfeat(autofix): one-click "Fix all" for Insights recommendations

    Adds a single Fix all button to the Insights / "Needs attention" recommendation surface (project overview and /insights). One click plans, confirms, and dispatches **o...

    @cigan1
49 older releases kept in CHANGELOG.md