close
Skip to content

docs(security): document cross-region backup for Postgres#2844

Draft
Steffen911 wants to merge 1 commit intomainfrom
docs/cross-region-backup
Draft

docs(security): document cross-region backup for Postgres#2844
Steffen911 wants to merge 1 commit intomainfrom
docs/cross-region-backup

Conversation

@Steffen911
Copy link
Copy Markdown
Member

@Steffen911 Steffen911 commented Apr 22, 2026

Summary

  • Adds a new Cross-Region Backup section to content/security/data-regions.mdx describing Postgres daily snapshot replication to a secondary AWS region per jurisdiction (EU ↔ EU, US ↔ US, JP ↔ JP), 14d retention, and re-encryption with a dedicated CMK.
  • Documents that ClickHouse tracing data and S3 media buckets are not replicated cross-region, and calls out the recovery implications (historical traces and uploaded media are not recoverable on permanent loss of the primary region).
  • Clarifies that this is a disaster-recovery control (not active-active), with an expected rebuild time of up to one business day, and that cross-region replication does not change the data-residency posture declared in the DPA / HIPAA BAA.
  • Minor casing fix: ClickhouseClickHouse.

Test plan

  • pnpm dev and visit /security/data-regions — verify the new ### Cross-Region Backup section renders under "Cloud (managed by Langfuse)" with the table and anchor #cross-region-backup working.
  • Confirm the inline link from the Durability row to #cross-region-backup scrolls to the new section.
  • Visually check the new table renders correctly on mobile (primary/secondary/mechanism/retention columns).

🤖 Generated with Claude Code

Disclaimer: Experimental PR review

Greptile Summary

This PR adds a Cross-Region Backup section to the data-regions page, documenting that Postgres daily snapshots are replicated to a secondary AWS region within the same legal jurisdiction, while ClickHouse tracing data and S3 media are explicitly called out as non-replicated with clear data-loss implications. The ClickhouseClickHouse casing fix is applied throughout the table but missed on line 10.

Confidence Score: 5/5

Safe to merge — all findings are P2 documentation polish items that do not affect correctness or security.

All three comments are P2 (style/clarity): a missed casing fix, an undocumented JP region row, and ambiguous RTO wording. None block merge or introduce data-integrity or security risk.

content/security/data-regions.mdx — minor casing inconsistency on line 10, JP region not surfaced in the Cloud Regions table, and potentially contradictory RTO figures.

Important Files Changed

Filename Overview
content/security/data-regions.mdx Adds Cross-Region Backup section documenting Postgres replication, ClickHouse/S3 gaps, and jurisdiction alignment; minor issues: missed Clickhouse casing fix on line 10, JP region not surfaced in the Cloud Regions table, and RTO figures across two sections may appear contradictory to compliance readers.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    subgraph Primary["Primary AWS Region"]
        PG["Postgres\n(org, project, user,\nAPI keys, prompts…)"]
        CH["ClickHouse\n(traces, observations,\nscores)"]
        S3["S3 Media Bucket\n(uploaded media)"]
    end

    subgraph Secondary["Secondary AWS Region\n(same jurisdiction)"]
        PG2["Postgres Replica\n(daily snapshot copy\nre-encrypted CMK\n14d retention)"]
        CH2["❌ Not replicated"]
        S3_2["❌ Not replicated"]
    end

    PG -->|"AWS Backup\ndaily snapshot"| PG2
    CH -.->|"no cross-region copy"| CH2
    S3 -.->|"no cross-region copy"| S3_2

    note1["EU: eu-west-1 → eu-central-1\nUS/HIPAA: us-west-2 → us-east-2\nJP: ap-northeast-1 → ap-northeast-3"]
    Secondary --- note1
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: content/security/data-regions.mdx
Line: 10

Comment:
**Missed casing fix: `Clickhouse``ClickHouse`**

The PR correctly updates `Clickhouse` to `ClickHouse` in the table rows, but the same incorrect casing remains on line 10 in the introductory paragraph.

```suggestion
Our database and application run on AWS infrastructure, partly managed by ClickHouse.
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: content/security/data-regions.mdx
Line: 69

Comment:
**JP region not listed in Cloud Regions table**

The cross-region backup table introduces `ap-northeast-1` / `ap-northeast-3` as the Japan primary/secondary regions, but the `## Langfuse Cloud Regions` table at the top of this page only lists US, EU, and HIPAA. A reader following the page top-to-bottom will have no indication that a JP region exists, making this row appear orphaned.

If the JP region is live, consider adding it to the Cloud Regions table. If it is not yet public, a brief parenthetical (e.g. "JP (private preview)") would avoid confusion.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: content/security/data-regions.mdx
Line: 56-65

Comment:
**RTO figures appear inconsistent across two sections**

The Business Continuity table states `RTO: 12 hours`, while the new Cross-Region Backup section states the rebuild time is "up to one business day." Since both figures sit under the same heading and neither scopes itself to a specific scenario (in-region vs. cross-region DR), a compliance reviewer or customer may read them as contradictory. Consider adding a clarifying note such as "(in-region recovery)" next to the 12-hour RTO and "(cross-region disaster recovery)" next to the one-business-day estimate.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "docs(security): document cross-region ba..." | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

Adds a Cross-Region Backup section to the data regions page describing
Postgres snapshot replication to a secondary AWS region, ClickHouse and
S3 non-replication caveats, and data-residency implications.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
langfuse-docs Ready Ready Preview, Comment Apr 22, 2026 8:20am

Request Review

@github-actions
Copy link
Copy Markdown

@claude review

@dosubot dosubot Bot added size:M This PR changes 30-99 lines, ignoring generated files. documentation Improvements or additions to documentation labels Apr 22, 2026
@Steffen911 Steffen911 marked this pull request as draft April 22, 2026 08:19

| Data store | Primary region | Secondary region | Mechanism | Retention |
|-------------------------------|--------------------------------------------------------------------------|---------------------------------------------------------|-------------------------------------------------------------------|------------------------|
| **Postgres** | EU: `eu-west-1` <br/> US / HIPAA: `us-west-2` <br/> JP: `ap-northeast-1` | `eu-central-1` <br/> `us-east-2` <br/> `ap-northeast-3` | AWS Backup daily snapshot copy, re-encrypted with a dedicated CMK | 14 days in each region |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 JP region not listed in Cloud Regions table

The cross-region backup table introduces ap-northeast-1 / ap-northeast-3 as the Japan primary/secondary regions, but the ## Langfuse Cloud Regions table at the top of this page only lists US, EU, and HIPAA. A reader following the page top-to-bottom will have no indication that a JP region exists, making this row appear orphaned.

If the JP region is live, consider adding it to the Cloud Regions table. If it is not yet public, a brief parenthetical (e.g. "JP (private preview)") would avoid confusion.

Prompt To Fix With AI
This is a comment left during a code review.
Path: content/security/data-regions.mdx
Line: 69

Comment:
**JP region not listed in Cloud Regions table**

The cross-region backup table introduces `ap-northeast-1` / `ap-northeast-3` as the Japan primary/secondary regions, but the `## Langfuse Cloud Regions` table at the top of this page only lists US, EU, and HIPAA. A reader following the page top-to-bottom will have no indication that a JP region exists, making this row appear orphaned.

If the JP region is live, consider adding it to the Cloud Regions table. If it is not yet public, a brief parenthetical (e.g. "JP (private preview)") would avoid confusion.

How can I resolve this? If you propose a fix, please make it concise.

@Steffen911
Copy link
Copy Markdown
Member Author

Preview:
image


| Data store | Primary region | Secondary region | Mechanism | Retention |
|-------------------------------|--------------------------------------------------------------------------|---------------------------------------------------------|-------------------------------------------------------------------|------------------------|
| **Postgres** | EU: `eu-west-1` <br/> US / HIPAA: `us-west-2` <br/> JP: `ap-northeast-1` | `eu-central-1` <br/> `us-east-2` <br/> `ap-northeast-3` | AWS Backup daily snapshot copy, re-encrypted with a dedicated CMK | 14 days in each region |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 The Cross-Region Backup table lists JP (ap-northeast-1ap-northeast-3) as an active primary/secondary pair, but JP is absent from the Cloud Regions table and other pages in the repo mark it as a "coming soon" / waitlist region. Enterprise readers reviewing the security page will see JP backup infrastructure described without any corresponding Cloud endpoint to connect it to, which is potentially misleading.

Extended reasoning...

What the bug is: The new Cross-Region Backup table added by this PR lists three primary regions — EU (eu-west-1), US/HIPAA (us-west-2), and JP (ap-northeast-1) — with corresponding secondary regions. The closing paragraph also states "All secondary regions are within the same legal jurisdiction … Japan ↔ Japan". However, the Langfuse Cloud Regions table earlier on the same page only documents three regions: US, EU, and HIPAA. There is no JP/Japan endpoint listed, and the "Connecting to a Region" section likewise has no JP base URL.

The specific code path: Lines 16–20 define the canonical Cloud Regions table. Line 69 (the Postgres row of the backup table) introduces JP: ap-northeast-1 and ap-northeast-3 as an active backup pair. Line 84 reinforces this with "Japan ↔ Japan" data residency language. No other part of data-regions.mdx introduces JP or explains how to access it.

Why existing content doesn't prevent confusion: The Cloud Regions table is the authoritative list of generally-available product endpoints. Because JP does not appear there, a reader has no way to know whether JP is available, in preview, on a waitlist, or entirely internal. The backup section presents JP on equal footing with EU and US/HIPAA, giving the impression it is a live region.

Impact: Two other files in the repository confirm JP is not yet launched: content/marketing/jp.mdx contains a callout stating "Langfuse Cloud 日本リージョンが近日公開!" (Japan region coming soon), and content/marketing/jp-cloud.mdx is a waitlist page with the description "Langfuse Cloud is coming to Japan. Join the waitlist for the Japan data region." Security-conscious enterprise readers — the primary audience of this page — who see a JP entry in the backup table but cannot find a JP product endpoint may be misled into believing a GA Japan region exists, or may become confused about Langfuse's actual product availability.

Step-by-step proof: (1) A prospective Japanese enterprise customer lands on /security/data-regions. (2) They scan the Cloud Regions table and find only US, EU, and HIPAA. (3) They scroll to the new Cross-Region Backup section and see "JP: ap-northeast-1" listed alongside EU and US/HIPAA as an active primary region. (4) They scroll to the closing paragraph and read "Japan ↔ Japan" data residency. (5) They return to the Cloud Regions section looking for a JP endpoint URL — it is not there. (6) They search other documentation and find only a waitlist page. The PR has introduced documentation that implies JP infrastructure is operational without providing any product-level context for it.

How to fix: Either (a) add a note in the backup table row (e.g., "JP — limited availability, see waitlist") and a matching callout in the Cloud Regions section, or (b) defer the JP backup row until the JP region is generally available and the Cloud Regions table can be updated simultaneously.

Comment on lines +57 to +58
| **Backup Layers** | Postgres: 7d retention. ClickHouse: 6-hourly backups (4d retention). S3: 7d versioning retention. |
| **Durability** | Encrypted backups stored across multiple availability zones within the primary region on AWS/ClickHouse Cloud; tested at least annually for restoration integrity. Postgres backups are additionally replicated to a secondary AWS region (see [Cross-Region Backup](#cross-region-backup) below). |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 The PR's stated casing fix (Clickhouse → ClickHouse) is incomplete: line 10 of data-regions.mdx still reads "partly managed by Clickhouse" while all table entries and newly added content now correctly use "ClickHouse". Update line 10 to use "ClickHouse" to complete the fix.

Extended reasoning...

What the bug is: The PR description explicitly lists "Minor casing fix: ClickhouseClickHouse" as a deliverable. The diff correctly updates two table rows (lines 57–58) in the Business Continuity table and all newly added Cross-Region Backup content uses ClickHouse consistently. However, the introductory paragraph at line 10 — "Our database and application run on AWS infrastructure, partly managed by Clickhouse." — was not touched and still uses the old incorrect casing.

The specific code path: The file content/security/data-regions.mdx line 10 contains the string Clickhouse (lowercase 'h'). The PR diff only modified lines 54–87 (the Business Continuity table and the new Cross-Region Backup section). Line 10 falls outside the diff hunk and was never updated.

Why existing code doesn't prevent it: There is no automated lint or spell-check that enforces the correct ClickHouse capitalization, so the missed instance sailed through undetected. The PR author updated instances within the edited region of the file but missed the earlier occurrence in the intro paragraph.

Impact: After this PR is merged, the document contains inconsistent vendor name casing: Clickhouse in the intro (line 10) and ClickHouse throughout every table and the new section (lines 57, 58, 70, 76, 77, and more). Security and compliance pages are often reviewed by customers and auditors; misspelling or inconsistently casing a vendor name looks unprofessional.

How to fix: Change line 10 from:
Our database and application run on AWS infrastructure, partly managed by Clickhouse.
to:
Our database and application run on AWS infrastructure, partly managed by ClickHouse.

Step-by-step proof:

  1. The PR description states: "Minor casing fix: ClickhouseClickHouse"
  2. Open content/security/data-regions.mdx (the only file changed in this PR)
  3. Read line 10: Our database and application run on AWS infrastructure, partly managed by Clickhouse. — old casing, not fixed
  4. Read line 58 (updated by the diff): | **Durability** | … on AWS/ClickHouse Cloud … — new casing, fixed
  5. Read any new content in the Cross-Region Backup section, e.g., line 76: ClickHouse stores historical traces… — new casing, consistent
  6. Conclusion: line 10 is the sole remaining instance of the old casing, making the fix incomplete as stated in the PR description.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant