Skip to content

docs(handbook/support): expand how-to-answer guide as decision tree#3008

Merged
CodeCLS merged 13 commits into
mainfrom
docs/support-decision-tree
Jun 1, 2026
Merged

docs(handbook/support): expand how-to-answer guide as decision tree#3008
CodeCLS merged 13 commits into
mainfrom
docs/support-decision-tree

Conversation

@CodeCLS
Copy link
Copy Markdown
Collaborator

@CodeCLS CodeCLS commented May 26, 2026

Grew the support playbook from a handful of templates to a 44-branch decision tree covering account/access, billing, self-hosting, ingestion, SDKs/integrations, prompt management, evaluations, security/compliance, data deletion, API errors, UI bugs, and non-support inbox triage.

Branches use native

/ (mapped to the Details MDX components) so support engineers and AI support agents can walk down to the matching playbook. Each leaf has triage steps, a canonical reply template drawn from real team replies, escalation rules, and links to existing FAQ pages.

Patterns are derived from analyzing ~1,500 closed Pylon tickets.

Greptile Summary

This PR replaces the original ~170-line support guide with a comprehensive 1,255-line decision tree covering 13 question categories and 44 branches, each containing triage steps, canonical reply templates drawn from ~1,500 resolved tickets, escalation rules, and links to existing FAQ pages.

  • The decision tree is structured with collapsible <details>/<summary> blocks so both human engineers and AI support agents can navigate to the matching playbook branch quickly.
  • Two concrete errors need attention before merge: a misplaced FAQ link in the CVE section points to /faq/all/data-retention-timeouts-and-errors (a data retention topic) instead of a security/disclosure page; and the startup discount code STARTUP-LF-50 is now published on a publicly accessible handbook URL, allowing it to be used at checkout without the required form submission.

Confidence Score: 3/5

The documentation changes are high-quality and well-structured, but two concrete correctness issues should be resolved before the page goes live: a wrong FAQ link that would send support engineers and AI agents to the wrong resource, and a promotional discount code that any visitor can now apply without completing the required vetting form.

The playbook content itself is thorough and drawn from real ticket resolutions. Two issues stand out: the STARTUP-LF-50 code published on a public URL defeats the form-gating intended by the startup program, and the CVE section points to an entirely unrelated FAQ about data retention. Both issues are on the changed file and have immediate operational impact — one financial, one on playbook accuracy.

content/handbook/support/how-to-answer-support-questions.mdx — specifically the startup discount code block (line 339) and the CVE section FAQ link (line 610).

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Incoming support ticket] --> B[Preflight: check tier, region, status page, Pylon duplicates]
    B --> C{Category?}
    C --> D[1. Account / login / access]
    C --> E[2. Billing / pricing / contracts]
    C --> F[3. Self-hosting]
    C --> G[4. Ingestion]
    C --> H[5. SDKs & integrations]
    C --> I[6. Prompt management]
    C --> J[7. Evaluations]
    C --> K[8. Security & compliance]
    C --> L[9. Data deletion & retention]
    C --> M[10. API errors]
    C --> N[11. UI bugs]
    C --> O[12. Customer leaving]
    C --> P[13. Non-support inbox]
    D --> D1{Sub-branch}
    D1 --> D2[Can't log in → region mismatch]
    D1 --> D3[Password reset → suppression list]
    D1 --> D4[SSO setup → collect IdP credentials]
    D1 --> D5[2FA recovery → verify ownership]
    D1 --> D6[Can't see org/project → RBAC/region]
    E --> E1{Sub-branch}
    E1 --> E2[Unexpected charge → Stripe + OTEL check]
    E1 --> E3[Cancel / downgrade → Stripe vs EE contract]
    E1 --> E4[Refund → USD 2k threshold]
    E1 --> E5[Startup discount → form + STARTUP-LF-50]
    E1 --> E6[Enterprise quote → route to Akio/Clemens]
    K --> K1[SOC2/ISO27001 → route to Akio]
    K --> K2[DPA → langfuse.com/security/dpa]
    K --> K3[BAA/HIPAA → hipaa.cloud.langfuse.com]
    K --> K4[Bug bounty → no formal program]
Loading
Prompt To Fix All With AI
Fix the following 4 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 4
content/handbook/support/how-to-answer-support-questions.mdx:610-616
Wrong FAQ linked under the CVE section. `/faq/all/data-retention-timeouts-and-errors` is about data retention jobs and errors, not vulnerability reports. A customer or AI agent following this playbook for a CVE report will land on an unrelated FAQ page, eroding trust in the playbook. The correct link would be to the security or responsible-disclosure page, or the link can simply be removed since no directly relevant FAQ exists yet.

```suggestion
Related FAQ: [/security/responsible-disclosure](https://langfuse.com/security/responsible-disclosure).

</details>

---

### 4. Ingestion (Cloud and self-hosted)
```

### Issue 2 of 4
content/handbook/support/how-to-answer-support-questions.mdx:339-346
**Discount code published on a public-facing page**

The handbook at `langfuse.com/handbook` is publicly accessible. Publishing `STARTUP-LF-50` here means anyone who reads this page — not just approved applicants — can apply it directly at checkout, bypassing the Google Form vetting step entirely. The stated requirement "All applicants go through the form, no exceptions" is now only advisory for anyone who finds this page. Consider either (a) removing the literal code and noting it is emailed post-approval, or (b) rotating the code to a form-generated per-applicant token so the public one no longer works.

### Issue 3 of 4
content/handbook/support/how-to-answer-support-questions.mdx:42-44
**Internal Slack handles and individual employee emails in a public document**

The AI-agents callout instructs AI agents to ping `@steffen.schmitz`, `@jannik.maierhoefer`, and `@caleb.seeling` by Slack handle. Individual email addresses for Akio and Clemens also appear throughout the billing and security sections. Since `langfuse.com/handbook` is publicly indexed, these identifiers are now crawlable by scrapers. Consider replacing specific handles with role-based escalation paths (e.g. "engineering on-call", "enterprise team") and keeping personal contacts in an internal-only note or Pylon macro.

### Issue 4 of 4
content/handbook/support/how-to-answer-support-questions.mdx:862-866
**GitHub discussion references lack full URLs**

Several entries reference discussions only by number — e.g. "#13268", "#13359", "#1819", "#12897", "#12876" — without specifying the repository. A support engineer (or an AI agent) cannot navigate to them without already knowing the repo context. Consider using full `github.com/langfuse/langfuse/discussions/NNNNN` links. The same applies to "#13438", "#13261", "#13514", "#13583", "#36107" (the last is a Dify issue, not a Langfuse one).

Reviews (1): Last reviewed commit: "docs(handbook/support): expand how-to-an..." | Re-trigger Greptile

Greptile also left 2 inline comments on this PR.

Grew the support playbook from a handful of templates to a 44-branch
decision tree covering account/access, billing, self-hosting, ingestion,
SDKs/integrations, prompt management, evaluations, security/compliance,
data deletion, API errors, UI bugs, and non-support inbox triage.

Branches use native <details>/<summary> (mapped to the Details MDX
components) so support engineers and AI support agents can walk down
to the matching playbook. Each leaf has triage steps, a canonical reply
template drawn from real team replies, escalation rules, and links to
existing FAQ pages.

Patterns are derived from analyzing ~1,500 closed Pylon tickets.

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

vercel Bot commented May 26, 2026

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

Project Deployment Actions Updated (UTC)
langfuse-docs Ready Ready Preview, Comment May 28, 2026 12:57pm

Request Review

@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. docs labels May 26, 2026
@github-actions
Copy link
Copy Markdown

@claude review

Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Address review comments on the support decision tree: remove an
unrelated FAQ link from the CVE section, scrub the public startup
discount code, split telemetry guidance into OSS (can disable) vs EE
(cannot disable), correct the SSO tier claim (included in self-hosted
OSS, not EE-gated), and fix region count and missing Japan region in
the login/password-reset reply templates.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
…nv var

LangChain branch was using v2 import path (langfuse.callback) and v2
helper (update_current_observation with usage=); update to v3
(langfuse.langchain and update_current_generation with usage_details=).
Also drop the LANGFUSE_PROMPT_CACHE_TTL env var from the prompt-caching
tip — it doesn't exist; cache_ttl_seconds=0 is the canonical bypass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CodeCLS and others added 2 commits May 28, 2026 11:22
Swap every em dash for context-appropriate punctuation (colon for
bullet-definition patterns, comma or period for inline pauses), and
remove personal references (Steffen, Akio, Clemens, Nimar) from
escalation paths in favor of generic team/role names
(engineering, enterprise team, enterprise@langfuse.com). AI-agent
handoff still names Jannik and Caleb.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
…recedence claims

- Scope the Java SDK claim: langfuse-java exists for prompts/scores via
  the public API but lacks native tracing, so experiments still need
  manual OTEL attribute propagation.
- Rename the legacy ingestion endpoint to /api/public/ingestion to match
  the canonical FAQ.
- Flip the framework otel operation.cost line so it no longer reads as
  self-contradictory: the framework attribute is overridden, our pricing
  table is the source of truth.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
…e, and SSO opener

- Replace the non-existent "Team" plan with "Pro + Teams Add-on" across
  the preflight tier list, SSO triage, Stripe-cancellation bullet, and
  SSO opener.
- Scope the SSO opener to Cloud (the original lead sentence claimed SSO
  was EE-gated and that support+engineering apply credentials, which
  contradicted the bullet below it for self-hosted users).
- Fix the data retention section: Pro Cloud (not just Enterprise) can
  configure retention; the EE-only claim only applies to self-hosted.
- Remove the "(read-only)" qualifier on the MCP server bullet: per the
  canonical MCP doc, both read and write tools ship enabled by default
  and read-only is a customer-side allowlist opt-in.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
- Stop calling the Python SDK "scoped packages" (it ships as the single
  pip package langfuse) and label JS scoped packages as v4+ (they
  debuted at v4 GA, not v1) across the missing-traces, OTEL, and
  evaluator-not-running branches.
- HIPAA branch: the BAA auto-applies for eligible HIPAA-region accounts
  (no signature flow) and past trace data is migratable via the data
  migration cookbook. Update both triage steps and the BAA reply
  template to match the canonical /security/hipaa page.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@CodeCLS CodeCLS enabled auto-merge May 28, 2026 11:59
@dosubot dosubot Bot added the auto-merge This PR is set to be merged label May 28, 2026
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

Additional findings (outside current diff — PR may have been updated during review):

  • 🔴 lib/source.ts:147-152 — Build-breaking: the recent revert in lib/source.ts removes the workshopSource export, but three files still import it from @/lib/sourcelib/section-registry.ts (lines 15, 122), app/workshop/layout.tsx (lines 1, 11), and app/workshop/[[...slug]]/page.tsx (lines 4, 22, 54, 70, 76). This will fail tsc / next build with TS2305 'Module "@/lib/source" has no exported member workshopSource' and block the Vercel deploy. Fix by either (a) also reverting the workshop callers (delete app/workshop/, remove the workshop entry from lib/section-registry.ts, and remove the workshop defineDocs(...) from source.config.ts:179-182) or (b) restoring the workshopSource loader in lib/source.ts.

    Extended reasoning...

    What the bug is. This PR contains two changes: an MDX docs expansion in content/handbook/support/how-to-answer-support-questions.mdx, and a revert in lib/source.ts that removes both the workshop collection import (line 17 of the prior file) and the entire workshopSource loader export (the deleted hunk at the old lines 148-153). The MDX change is the headline; the second change is the build breaker.

    The specific code path that triggers the failure. Three files in the working tree still import the now-deleted symbol from @/lib/source:

    1. lib/section-registry.ts:15import { ..., workshopSource, ... } from "@/lib/source"; — used at line 122 as source: workshopSource inside docSections.workshop.
    2. app/workshop/layout.tsx:1import { workshopSource } from "@/lib/source"; — used at line 11 as workshopSource.getPageTree() in the layout shell.
    3. app/workshop/[[...slug]]/page.tsx:4import { workshopSource } from "@/lib/source"; — used at lines 22, 54, 70, and 76 (workshopSource.getPages(), workshopSource.getPage(slug), workshopSource.generateParams()). The generateStaticParams call at line 76 in particular runs during next build, so this is not just a type error — it is a build-time runtime reference to a missing module export.

    These imports are unconditional named imports, not commented out and not behind a feature flag. TypeScript will reject them with TS2305: Module "@/lib/source" has no exported member workshopSource, and Next.js will fail to resolve the symbol at bundle time.

    Why existing guardrails do not catch this. The PR title and description scope it as a docs change (docs(handbook/support): expand how-to-answer guide as decision tree), and the prose review tooling (Greptile, Vercel preview comments) focuses on the MDX content. There is no markdown-only linter that would flag this — only tsc / next build would. The Vercel preview is listed as "Building" in the PR timeline; once it gets past the docs change, the Next build step on this branch will fail.

    Note on the underlying data. The workshop collection itself is still declared in source.config.ts:179-182 (export const workshop = defineDocs({ dir: "content/workshop", ... })), so the underlying MDX collection is intact. Only the loader wrapper that exposes it as workshopSource was removed. This means the revert is partial: data layer remains, loader is gone, callers still reference the loader.

    Step-by-step proof.

    1. Check out this PR branch and run pnpm install.
    2. Run pnpm typecheck (or npx tsc --noEmit). It will fail with three TS2305 errors at lib/section-registry.ts:15, app/workshop/layout.tsx:1, and app/workshop/[[...slug]]/page.tsx:4, all of the form Module '"@/lib/source"' has no exported member 'workshopSource'.
    3. Equivalently, run pnpm build (or next build). It will fail at the type-check phase with the same errors, or at the bundle phase when Next.js tries to resolve the named import.
    4. Vercel deploy will fail on the same step. The "Building" status in the PR timeline will flip to "Failed" once the typecheck stage runs.

    Impact. Hard build-breaking on a docs PR. Blocks Vercel deploy and any downstream merge train. The PR title and description give no signal that a non-docs file is being touched, which makes this easy to miss in review.

    How to fix. Pick one of two paths:

    • (a) Complete the revert. The previous commit 51f584f [codex] Add workshop section (#3003) introduced all of these caller sites together with the loader. Mirror its inverse: delete app/workshop/ (both layout.tsx and [[...slug]]/page.tsx), remove the workshopSource import and the workshop entry from lib/section-registry.ts, and remove the workshop = defineDocs({...}) block from source.config.ts:179-182. This is the minimal change consistent with the commit message "remove workshop collection loader".
    • (b) Restore the loader. Re-add the workshop import to lib/source.ts and re-add the workshopSource = loader({...}) block. This keeps the workshop section live in production until the team is ready to remove it end-to-end.

    Either fix unblocks the build. (a) matches the intent of the commit message; (b) is the smaller diff and lower-risk if the revert was not actually intended to remove the workshop UI as well.

@CodeCLS CodeCLS disabled auto-merge May 28, 2026 12:00
@dosubot dosubot Bot removed the auto-merge This PR is set to be merged label May 28, 2026
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
…claim

Per content/handbook/chapters/open-source.mdx, EE modules ship as source
code in the same image and are runtime-gated by LANGFUSE_EE_LICENSE_KEY.
Remove the four reply-template sentences/bullets that claimed the
published image excludes the @langfuse/ee package; the existing
runtime-gating language ('no EE code paths execute without the env var')
already covers the compliance question correctly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx Outdated
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
…ode claims

- Replace the parenthetical EE-feature enumeration (6 features, used
  "project-level masking" instead of "Server-Side Data Masking") in
  both the Canonical facts bullet and the reply template with a link to
  /self-hosting/license-key, which has the full 9-feature list.
- Remove the "Fast Mode is on by default" triage bullet (default
  depends on org creation date per /docs/v4) and drop the "left
  sidebar" location claim from the UI-bug branch and its reply
  template (the toggle is in the bottom-left corner, not the main nav).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
Comment thread content/handbook/support/how-to-answer-support-questions.mdx
@CodeCLS CodeCLS added this pull request to the merge queue Jun 1, 2026
@dosubot dosubot Bot added the auto-merge This PR is set to be merged label Jun 1, 2026
Merged via the queue into main with commit 6ee2fd5 Jun 1, 2026
17 checks passed
@CodeCLS CodeCLS deleted the docs/support-decision-tree branch June 1, 2026 14:46
@dosubot dosubot Bot removed the auto-merge This PR is set to be merged label Jun 1, 2026
nimarb pushed a commit that referenced this pull request Jun 2, 2026
…3008)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant