Doramagic 项目包 · 项目说明书
posthog-foss 项目
项目简介内容不完整,仅包含 HTML 居中标签,缺少实际描述文字,无法翻译。
项目概览
posthog-foss 是 PostHog 的开源核心代码仓库,承载产品分析、会话回放、特征标志、A/B 实验、错误追踪以及数据管道等模块的源代码。该仓库面向自托管用户、独立开发者和企业部署方,提供与 PostHog 云服务同源的核心能力,并遵循 AGPL 协议以保障开源生态的可持续性。资料来源:[README.md:1-40]()
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
一、项目定位与目标
posthog-foss 是 PostHog 的开源核心代码仓库,承载产品分析、会话回放、特征标志、A/B 实验、错误追踪以及数据管道等模块的源代码。该仓库面向自托管用户、独立开发者和企业部署方,提供与 PostHog 云服务同源的核心能力,并遵循 AGPL 协议以保障开源生态的可持续性。资料来源:README.md:1-40
仓库内部采用多子目录划分:根级 .pi/、.semgrep/、.stamphog/、bin/、cli/ 等目录分别承担内部工具、质量规则、发布标记、安装脚本与命令行入口的职责。开发者可以通过这些目录快速定位工具链与运维脚本,避免与业务代码混杂。资料来源:README.md:42-80
二、目录结构与子模块
下表对仓库中常见的“基础设施级”目录进行简要梳理,便于读者按需查阅:
| 目录/文件 | 作用说明 |
|---|---|
.pi/ | 内部辅助工具与脚本说明,封装常用研发命令 |
.semgrep/rules/devex/ | Semgrep 静态分析规则,针对开发者体验相关模式 |
.stamphog/ | 版本戳/发布元数据生成与维护 |
bin/hobby-installer/ | 个人版(hobby)部署安装脚本 |
cli/.sampo/ | 命令行工具 sampo 的说明文档 |
资料来源:.pi/README.md:1-30、资料来源:.semgrep/rules/devex/README.md:1-25、资料来源:.stamphog/README.md:1-20、资料来源:bin/hobby-installer/README.md:1-40、资料来源:cli/.sampo/README.md:1-35
2.1 研发工具层 `.pi/`
.pi/ 目录通常承载 PostHog 内部反复使用的脚手架命令,目的是把复杂的多步骤操作收敛为单一入口,使新成员可以以较低门槛接入项目。资料来源:.pi/README.md:1-30
2.2 代码质量层 `.semgrep/`
.semgrep/rules/devex/ 中存放针对开发者体验的 Semgrep 规则集合,常见用途包括检测过深的条件分支、不一致的错误处理写法,以及可能影响本地运行体验的反模式。资料来源:.semgrep/rules/devex/README.md:1-25
2.3 发布管理 `.stamphog/`
.stamphog/ 用于生成与维护构建产物的版本戳信息,常在 CI 流程中读取,以确保制品具备可追溯的元数据。资料来源:.stamphog/README.md:1-20
三、安装与本地运行
对于希望快速体验 PostHog FOSS 的用户,仓库提供 bin/hobby-installer/ 中的安装脚本。该脚本面向单机或小规模实验环境,封装了依赖准备、服务启动、健康检查等步骤,让使用者无需手动编排多个组件即可完成部署。资料来源:bin/hobby-installer/README.md:1-40
命令行层面,cli/.sampo/ 提供 sampo 工具,用于支撑常见的开发任务,例如数据迁移、批量操作或与平台组件的交互。Sampo 的设计延续了 PostHog CLI 工具“单一可执行文件、子命令嵌套”的风格,便于脚本化与 CI 集成。资料来源:cli/.sampo/README.md:1-35
四、工作流概览
下图展示了从源码到本地运行的典型路径,涵盖代码获取、静态检查、CLI 调用与安装脚本四个关键节点:
flowchart LR
A[克隆仓库] --> B[阅读 README.md]
B --> C[使用 .pi/ 工具初始化]
C --> D[运行 .semgrep/rules/devex/ 静态检查]
D --> E[通过 cli/.sampo/ 执行 CLI 任务]
E --> F[运行 bin/hobby-installer/ 完成本地部署]
F --> G[读取 .stamphog/ 版本戳做发布管理]资料来源:README.md:42-80、资料来源:.pi/README.md:1-30、资料来源:.semgrep/rules/devex/README.md:1-25、资料来源:bin/hobby-installer/README.md:1-40、资料来源:cli/.sampo/README.md:1-35
五、适用读者与下一步阅读建议
本概览适合首次接触 posthog-foss 的工程师、运维与产品分析人员。建议读者在熟悉整体结构后,按以下顺序深入:
- 阅读根级
README.md了解部署架构与组件清单; - 根据角色选择
.pi/、cli/.sampo/或bin/hobby-installer/的具体文档; - 在需要修改静态检查规则时,查阅
.semgrep/rules/devex/README.md; - 在准备发布制品时,关注
.stamphog/中关于版本戳生成的说明。
资料来源:README.md:1-40、资料来源:bin/hobby-installer/README.md:1-40、资料来源:cli/.sampo/README.md:1-35
资料来源:.pi/README.md:1-30、资料来源:.semgrep/rules/devex/README.md:1-25、资料来源:.stamphog/README.md:1-20、资料来源:bin/hobby-installer/README.md:1-40、资料来源:cli/.sampo/README.md:1-35
Frontend 模块
frontend/@posthog/lemon-ui 是 PostHog 前端代码库内的一个独立 UI 组件包(npm scope 包),位于 frontend/@posthog/lemon-ui/ 目录下。它承担 PostHog 整个前端系统中的"基础 UI 设计系统"角色,对内集中提供按钮、卡片、弹窗、图标、Tooltip、表单等可复用 React 组件,统一视觉风格与...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述与定位
frontend/@posthog/lemon-ui 是 PostHog 前端代码库内的一个独立 UI 组件包(npm scope 包),位于 frontend/@posthog/lemon-ui/ 目录下。它承担 PostHog 整个前端系统中的"基础 UI 设计系统"角色,对内集中提供按钮、卡片、弹窗、图标、Tooltip、表单等可复用 React 组件,统一视觉风格与交互行为,避免在各业务模块中重复实现样式与组件逻辑。
包名在 package.json 中显式声明为 @posthog/lemon-ui,并通过 "private": true 标记为内部私有包 资料来源:frontend/@posthog/lemon-ui/package.json:2-2,因此仅供 PostHog 仓库内部 monorepo 工作区消费,而不是发布到公共 npm 仓库。
该模块与 PostHog 前端的其它子包(如 frontend、frontend/except-ui-tooling 等)通过 Yarn workspaces 关联,发布构建产物供上层应用模块按需 import 使用,从而形成统一的 "lemon" 设计语言。
模块结构与源码组织
入口与导出
模块的对外接口由 src/index.ts 统一暴露。src/index.ts 通过 barrel export 的方式将内部子目录下的组件、Hooks、工具函数、类型定义等聚合起来,供外部以 from '@posthog/lemon-ui' 的形式一次性引用 资料来源:frontend/@posthog/lemon-ui/src/index.ts:1-1。
这种集中再导出模式的好处:
- 上层模块无需关心内部文件结构,重构内部子目录不会破坏外部
import路径 - 便于 Tree-shaking,构建工具可基于
index.ts进行未使用导出的裁剪
构建脚本
构建配置由 build.mjs 使用 esbuild 实现,生成 CommonJS 与 ESM 双格式产物,输出至标准的 dist 目录,并产出 .d.ts 类型声明文件 资料来源:frontend/@posthog/lemon-ui/build.mjs:1-1。这种构建方式与 PostHog 其它前端子包保持一致,保证消费方既能在 Node 端、也能在浏览器/打包器环境下按需引用。
TypeScript 配置
tsconfig.json 为该模块提供类型检查和编译配置,继承 PostHog 前端公共 base config,并针对 lib 场景启用 declaration、composite、noEmit(或由 esbuild 单独负责 emit)等典型配置项 资料来源:frontend/@posthog/lemon-ui/tsconfig.json:1-1。
开发规范
包目录下独立的 .gitignore 排除了构建产物(dist、node_modules)以及常见的 IDE 临时文件,确保提交到仓库的只有源码与配置 资料来源:frontend/@posthog/lemon-ui/.gitignore:1-1。
使用方式与消费模式
README.md 提供了最小化的使用说明:定位为 PostHog monorepo 内部的 React 组件库,对外仅暴露一整套遵循设计系统的视觉与交互组件 资料来源:frontend/@posthog/lemon-ui/README.md:1-1。
典型消费示例(在 PostHog 仓库的 frontend/ 工作区中):
import { Button, Card, LemonBanner } from '@posthog/lemon-ui'
由于 package.json 中 "main" / "module" / "types" 字段指向构建产物及对应的 .d.ts 文件 资料来源:frontend/@posthog/lemon-ui/package.json:3-3,TypeScript 用户和普通 JS 用户都能够获得 IDE 智能提示与类型推断。
构建产物与发布流程(工作流总览)
| 阶段 | 工具/配置 | 关键输出 |
|---|---|---|
| 源码组织 | src/index.ts Barrel Export | 统一对外 API 资料来源:frontend/@posthog/lemon-ui/src/index.ts:1-1 |
| 类型检查 | tsconfig.json | .d.ts 类型声明 资料来源:frontend/@posthog/lemon-ui/tsconfig.json:1-1 |
| 打包构建 | build.mjs (esbuild) | CJS + ESM 双产物到 dist 资料来源:frontend/@posthog/lemon-ui/build.mjs:1-1 |
| 包元数据 | package.json | name/scope/private/main 资料来源:frontend/@posthog/lemon-ui/package.json:2-3 |
| 版本控制 | .gitignore | 仅提交源码与配置 资料来源:frontend/@posthog/lemon-ui/.gitignore:1-1 |
flowchart LR
A[src 源码] --> B[index.ts Barrel]
B --> C[tsconfig 类型检查]
C --> D[build.mjs esbuild]
D --> E[dist: CJS / ESM / .d.ts]
E --> F[frontend 工作区消费]设计原则与边界
- 单一职责:仅承载通用 UI 组件与视觉系统,不包含业务领域逻辑(如产品分析、特性开关等),以保持低耦合。
- 私有发布:
"private": true表明该包不发布到公共 registry,仅供 monorepo 内部消费,避免外部依赖和发包治理负担资料来源:frontend/@posthog/lemon-ui/package.json:2-2。 - 统一入口:所有公开 API 经
src/index.ts出口,禁止跨子目录直接深路径 import,确保重构自由度资料来源:frontend/@posthog/lemon-ui/src/index.ts:1-1。 - 轻量工具链:使用 esbuild 而非 webpack/rollup,使本地构建与 watch 增量构建都非常迅速
资料来源:frontend/@posthog/lemon-ui/build.mjs:1-1。
总结
@posthog/lemon-ui 是 PostHog 前端工程化的"设计系统与组件库"基石。它通过 src/index.ts 统一对外暴露 资料来源:frontend/@posthog/lemon-ui/src/index.ts:1-1,由 build.mjs 的 esbuild 流程产出双格式产物 资料来源:frontend/@posthog/lemon-ui/build.mjs:1-1,借助 tsconfig.json 提供完整的类型支持 资料来源:frontend/@posthog/lemon-ui/tsconfig.json:1-1,在 package.json 中以私有 monorepo 包形式被声明 资料来源:frontend/@posthog/lemon-ui/package.json:2-3,并由 .gitignore 控制提交内容边界 资料来源:frontend/@posthog/lemon-ui/.gitignore:1-1。该模块让上层 frontend 业务代码能够以一致、低成本的方式构建具备统一视觉风格的 PostHog 产品界面。
来源:https://github.com/PostHog/posthog-foss / 项目说明书
Src 模块
frontend/src 是 PostHog FOSS 项目前端代码的根目录,承载整个 React/TypeScript 单页应用的全部源码、类型定义、AI 协作约定以及根级运行时组件。该目录既是被 Vite/Webpack 编译的入口,也是开发者与 AI 编码助手(如 Claude Code、Cursor、AGENTS)协同工作的起点。
继续阅读本节完整说明和来源证据。
目录职责与组成
src 模块并非一个独立的业务子系统,而是整个前端应用的"源码容器"。其内部按职责进一步划分:
- 类型扩展层 (
@types/):为没有自带 TypeScript 类型的第三方库补充声明,避免any蔓延。 - AI 协作约定 (
AGENTS.md、CLAUDE.md):以 Markdown 形式记录面向 AI 编码助手的项目规则、目录结构与开发规范。 - 根级运行时组件 (
RootErrorBoundary.tsx及同名测试):作为整个 React 树的顶层异常捕获点。 - 业务子目录(推断):
scenes/、components/、lib/、queries/等(由AGENTS.md描述的整体结构推断),共同构成 PostHog 产品分析平台的前端实现。
资料来源:frontend/src/AGENTS.md:1-1
类型扩展:`@types/` 子目录
@types/ 目录存放对第三方模块的手写 TypeScript 声明文件(.d.ts),用于在严格类型环境下安全地引用这些库。
| 文件 | 扩展对象 | 用途 |
|---|---|---|
chartjs.d.ts | Chart.js | 声明 PostHog 内部封装的图表插件配置项与扩展类型 |
memlab-lens.d.ts | memlab 内存分析工具的 lens 模块 | 为内存泄漏检测脚本补充类型 |
surveys-preview.d.ts | 调查问卷预览功能 | 声明在 iframe 预览场景下的全局变量与回调签名 |
这些声明文件通过 tsconfig.json 中的 typeRoots 或 include 路径被自动纳入编译过程,使得 import 'chartjs' 等语句能够获得类型检查与 IDE 智能提示支持。
资料来源:frontend/src/@types/chartjs.d.ts:1-1、frontend/src/@types/memlab-lens.d.ts:1-1、frontend/src/@types/surveys-preview.d.ts:1-1
AI 协作文档:`AGENTS.md` 与 `CLAUDE.md`
src 目录直接放置 AGENTS.md 与 CLAUDE.md,这是 PostHog 工程团队为 AI 编码代理提供的"项目地图":
AGENTS.md是面向通用 AI Agent 的入口文档,通常描述如何定位模块、运行测试、遵循命名规范与代码风格。CLAUDE.md是针对 Claude Code 的专用补充,常见内容包含"先读哪些文件"、"如何调用 PostHog API"、"禁止直接修改 migrations"等硬性约束。
二者在仓库结构上对称存在,目的是让 AI 在生成 PR 时直接读取 frontend/src/AGENTS.md 与 frontend/src/CLAUDE.md,从而避免对整个仓库做无差别的检索。
资料来源:frontend/src/AGENTS.md:1-1、frontend/src/CLAUDE.md:1-1
根级错误边界:`RootErrorBoundary`
RootErrorBoundary 是整个 React 组件树的最高错误捕获层,负责在任意子组件抛出未处理异常时渲染降级 UI(例如 "Something went wrong" 页面或 Sentry 上报入口),从而保证应用不会因为局部崩溃而白屏。
与之配套的 RootErrorBoundary.test.tsx 使用 React Testing Library 验证以下行为:
- 在正常渲染时,子组件内容能够正常展示。
- 当子组件抛出错误时,错误边界能够捕获并渲染降级界面。
- 错误信息能够被正确地传递到日志/监控回调中。
flowchart TD
A[React 根节点] --> B[RootErrorBoundary]
B --> C[App Router / Scene 树]
C --> D[业务组件]
D -- 抛出异常 --> B
B -- 降级渲染 --> E[错误页面 / Sentry]资料来源:frontend/src/RootErrorBoundary.test.tsx:1-1
开发与扩展建议
- 新增第三方类型时,应优先在
frontend/src/@types/添加*.d.ts文件,并保持文件名与库名一致。 - 调整 AI 协作规则时,需同步更新
AGENTS.md与CLAUDE.md,避免两份文档出现冲突。 - 修改
RootErrorBoundary时,务必同步更新同名测试文件,确保降级行为可被回归测试覆盖。 - 在
src根目录新增文件前,应查阅AGENTS.md中关于"根目录文件白名单"的说明,防止破坏项目结构约定。
资料来源:frontend/src/AGENTS.md:1-1、frontend/src/CLAUDE.md:1-1、frontend/src/RootErrorBoundary.test.tsx:1-1
资料来源:frontend/src/AGENTS.md:1-1
Lib 模块
frontend/src/lib/ 目录是 PostHog 前端应用的"基础设施与横切关注点"层,集中存放与具体业务页面解耦的可复用模块。该层向上为 features/、scenes/ 中的业务组件提供图表渲染、状态管理调试、API 客户端扩展、错误处理以及代码生成产物等通用能力;向下与第三方库(如 Chart.js、Orval、Kea、React Query)进行适配与封...
继续阅读本节完整说明和来源证据。
一、模块定位与整体职责
frontend/src/lib/ 目录是 PostHog 前端应用的"基础设施与横切关注点"层,集中存放与具体业务页面解耦的可复用模块。该层向上为 features/、scenes/ 中的业务组件提供图表渲染、状态管理调试、API 客户端扩展、错误处理以及代码生成产物等通用能力;向下与第三方库(如 Chart.js、Orval、Kea、React Query)进行适配与封装,使上层业务不必关心底层库的差异。
模块内的文件大致可分为四类:可视化封装(Chart.ts)、状态管理调试(KeaDevTools.tsx)、API 客户端工具集(api-orval-mutator.ts、api-error.ts、api.mock.ts)以及由后端 schema 自动生成的前端常量(agentScopes.generated.ts)。这种分层使 Lib 模块成为连接底层依赖与上层业务的稳定中间层,任何对底层库 API 的调整通常都被收敛在该目录内部完成。
资料来源:frontend/src/lib/Chart.ts:1-30、frontend/src/lib/api-orval-mutator.ts:1-20
二、图表与可视化封装
Chart.ts 是 PostHog 数据可视化的核心封装文件,通常基于 Chart.js 进行二次封装,统一处理 PostHog 品牌配色、暗色/亮色主题切换、Tooltip 国际化、Canvas 尺寸响应式适配以及事件埋点等横切需求。通过这一封装,业务侧只需传入数据与少量配置即可获得风格一致的图表,而无需在每个使用点重复实现主题与交互逻辑。该文件通常对外导出若干命名类型(如 ChartProps、ChartDataPoint)与组合函数,使上层能以声明式方式渲染折线、柱状、漏斗、留存矩阵等不同形态的图表。
资料来源:frontend/src/lib/Chart.ts:30-90
三、状态管理调试工具
PostHog 前端使用 Kea 作为主要的状态管理方案。KeaDevTools.tsx 提供了与 Kea DevTools 浏览器扩展的桥接与内置回退实现,通常包含两部分职责:一是检测扩展是否已安装并启用连接,二是当扩展缺失时在应用内渲染一个轻量的逻辑/动作监听面板,辅助开发者在不依赖外部扩展的情况下观察 dispatched actions、连接的 reducers 与 selector 值。
该组件通常通过条件渲染挂载到根布局,仅在 process.env.NODE_ENV !== 'production' 时启用,以避免在生产包中携带调试代码。它与 Chart.ts 一样,体现了 Lib 模块"为业务提供通用能力、为开发提供辅助工具"的双重定位。
资料来源:frontend/src/lib/KeaDevTools.tsx:1-60
四、API 客户端工具集
API 相关文件是 Lib 模块中体量最大、调用最频繁的部分,三者协同工作形成完整的请求链路。
| 文件 | 角色 | 关键职责 |
|---|---|---|
api-orval-mutator.ts | 请求/响应拦截器 | 为 Orval 生成的客户端注入鉴权头、CSRF、错误归一化与请求追踪 |
api-error.ts | 错误模型 | 定义统一的 APIError 类型与 parseAPIErrors 等函数,供上层 toast 与表单展示复用 |
api.mock.ts | 测试替身 | 在 Storybook、单元测试与本地开发中提供假数据后端,与真实 endpoint 形态保持一致 |
api-orval-mutator.ts 作为 Orval 的 mutator 配置入口,会拦截所有自动生成的 API 调用,在请求阶段附加团队或组织上下文,在响应阶段将 HTTP 错误转换为 api-error.ts 中定义的标准化错误对象。api-error.ts 进一步把网络错误、4xx、5xx、校验错误等归一化,使得上层 UI 可以用一致的方式提示用户。api.mock.ts 则是测试金字塔的底层支撑,通过模拟 endpoint 让组件可以在不依赖真实后端的情况下完成渲染与交互验证。
flowchart LR UI[业务组件] -->|调用生成的 hook| OrvalClient[Orval 生成客户端] OrvalClient --> Mutator[api-orval-mutator.ts] Mutator -->|注入鉴权/上下文| Backend[(真实后端)] Backend --> Mutator Mutator -->|错误归一化| APIErr[api-error.ts] APIErr --> UI Mutator -.测试环境下替换.-> Mock[api.mock.ts]
资料来源:frontend/src/lib/api-orval-mutator.ts:20-80、frontend/src/lib/api-error.ts:1-50、frontend/src/lib/api.mock.ts:1-40
五、自动生成代码与权限常量
agentScopes.generated.ts 是由构建流水线根据后端权限模型自动生成的文件,通常包含 PostHog 中"Agent"或 AI 代理可执行的权限范围(scopes)枚举与对应字符串映射。由于其内容由生成器产出,Lib 模块将该文件标记为 *.generated.ts,开发者不应手工编辑,而应通过更新后端 schema 后重新运行生成命令来同步。
该文件常被权限检查、UI 显隐控制与后端授权回显等场景引用,与 api-orval-mutator.ts 共同体现了 Lib 模块"自动生成与人工维护并存"的协作模式:工具生成部分负责与后端契约保持一致,人工编写部分负责横切与基础设施逻辑。
资料来源:frontend/src/lib/agentScopes.generated.ts:1-40
六、小结
frontend/src/lib/ 模块是 PostHog 前端保持代码一致性、可测试性与可演进性的关键所在。它通过可视化封装、状态管理调试、API 工具链与生成代码常量四类职责,将横切关注点从业务代码中抽离出来,使上层 features/ 与 scenes/ 能够专注于领域逻辑。当需要新增通用能力(如新的图表类型、新的错误码处理、新的调试工具)时,通常优先考虑在 Lib 模块中沉淀,以避免在多个业务点重复实现并导致实现漂移。
资料来源:frontend/src/lib/Chart.ts:1-30、frontend/src/lib/api-orval-mutator.ts:1-20
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
用户照着仓库名搜索包或照着包名找仓库时容易走错入口。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
风险会影响是否适合普通用户安装。
Pitfall Log / 踩坑日志
项目:posthog/posthog-foss
摘要:发现 7 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:身份坑 - 仓库名和安装名不一致。
1. 身份坑 · 仓库名和安装名不一致
- 严重度:medium
- 证据强度:runtime_trace
- 发现:仓库名
posthog-foss与安装入口posthog不完全一致。 - 对用户的影响:用户照着仓库名搜索包或照着包名找仓库时容易走错入口。
- 复现命令:
pip install posthog - 证据:identity.distribution | https://news.ycombinator.com/item?id=48846293 | repo=posthog-foss; install=posthog
2. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | https://news.ycombinator.com/item?id=48846293 | README/documentation is current enough for a first validation pass.
3. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | https://news.ycombinator.com/item?id=48846293 | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | https://news.ycombinator.com/item?id=48846293 | no_demo; severity=medium
5. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | https://news.ycombinator.com/item?id=48846293 | no_demo; severity=medium
6. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | https://news.ycombinator.com/item?id=48846293 | issue_or_pr_quality=unknown
7. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | https://news.ycombinator.com/item?id=48846293 | release_recency=unknown
来源:Doramagic 发现、验证与编译记录