Language note: historical archive, kept in its original Chinese. The authforge→fulla rename impact analysis (executed via PR #93/#94/#95; version series reset to v1.0.0). Current rules live in documentation-governance.md.
本文档是改名决策的历史档案(入库版,本机细节已泛化)。其中的执行计划已全部 完成:仓库已改名 voidvec/fulla、版本序列重置为 v1.0.0、PyPI fulla-oauth2 已 发布。当前权威规则见 documentation-governance.md。
authforge → fulla 改名影响范围分析
分析日期:2026-08-25(第一轮 + 同日第二轮补充审查,见 §2bis)| 方法:
git grep全仓实测 + 外部 registry/API 实查 前置文档:rename-candidates.md(本地维护副本)(命名调研,fulla 排名第 9)版本策略(2026-08-25 已定):改名视为新产品身份,版本序列重置为 v1.0.0(而非 v2.0.0)。依据:SemVer 约束的是包身份而非仓库——
fulla-oauth2/fulla-*镜像/fullaCMake 包均为新身份,1.0.0 起步是唯一自然选择;项目零外部用户,v2.0.0 的"破坏性升级"信号无处安放,反而让新项目首发 2.0 显得来历不明。先例:OpenSearch fork 自 ES 7.10 仍以 1.0.0 首发。直接 1.0.0(不用 0.x)是因为代码库已有 353 ctest + 完整 CI 矩阵 + benchmark 体系,0.x 会低估成熟度。红线(不可随之重置)见 §6 末尾。
0. 结论摘要
改名是大规模但低风险的工程:全仓 1658 个文件、约 1.1 万处 authforge 出现,其中约 90% 是纯机械替换(源码标识符、脚本、文档、CI),真正需要决策和迁移策略的只有 8 个层面:
| # | 非机械层面 | 性质 |
|---|---|---|
| 1 | Redis 键前缀 authforge:cache:* + Prometheus 指标 authforge_cache_* | 运行时数据面:前缀变更=升级时缓存整体失效;指标变更=监控面板/告警断点 |
| 2 | PyPI 已发布包 authforge-oauth2(1.4.x 在线)+ GHCR 镜像 voidvec/authforge-* | 已发布工件:旧名永久存在,需 deprecation + 新名并行 |
| 3 | api-diff 门禁基线(tools/api-diff/api-baseline.txt,820 处) | CI 门禁:改名=全局 API 破坏,基线必须重生成并 --force 批准 |
| 4 | C++ 公共 API 面(#include <authforge/...> 路径 + namespace authforge) | 语义化版本:版本序列重置为 v1.0.0(新产品身份,见文首决策) |
| 5 | Go module path github.com/voidvec/authforge/clients/go | module 路径=URL:旧路径不可长期依赖 |
| 6 | 本机目录改名 D:\...\authforge | 工作区身份/构建缓存/多工具路径全部失效 |
| 7 | OAUTH2_* 环境变量前 缀(20+ 变量、1260 处、22 个代码文件读取) | 第二套命名体系,规范化决策见 §2bis B |
| 8 | 前端品牌面(文案 + e2e 断言 + 页面标题 + package.json 名) | UI 品牌替换与测试断言必须同 PR,漏改直接挂 e2e |
三条好消息(实测排除的担忧):
- 数据库零影响:DB 名/用户是
oauth2_db/oauth2_user(deploy/docker/docker-compose.debug.yml:7-9),不含项目名;SQL 迁移/种子文件零命中; - 协议面零影响:cookie 名、issuer、User-Agent 中无任何 authforge 字样——JWT/session/OIDC 协议行为完全不变,存量令牌不受影响;
- 运行时配置零耦合:
apps/server/config/*.json(5 份)中 0 处 authforge,filters 段为空数组——过滤器名("authforge::drogon::filters::..."共 56 处字符串字面量)只在代码内自洽,随命名空间一并机械替换即可。
1. 实测总量(2026-08-25,git 跟踪文件)
- 1658 个文件含
authforge(不区分大小写),合计约 11,000+ 处; - 目录分布:benchmarks 821(其中 ~770 为历史测量结果数据,见 §8)、libs 328、.qoder 镜像 wiki 201(可再生)、tests 108、docs 52、apps 21、clients 18、deploy 17、其余为脚本/CI/配置/README;
- 标识符变 体 TOP:
authforge(9826)、authforge-sdk(279)、authforge-server(161)、authforge-oauth2(64)、authforge-tests(53)、authforge-drogon(43)、authforgepackage(41)、authforge_package(38) 等。
2. 分层影响清单
L1 品牌与身份资产(改名决策本体)
| 资产 | 现状 | 改为 fulla 的影响 |
|---|---|---|
| GitHub 仓库 | voidvec/authforge | Settings 改名后 web/git 链接 301 重定向(issues/PRs/stars/tags 全保留);重定向在别人抢注旧名时失效——改名后旧名空置即有此风险,可接受 |
| GitHub org | voidvec(不含项目名) | 无影响。注意:GitHub 用户名/org fulla 已被占用(早前实测 404 检查 github=200),若想要 fulla 同名 org 需变体(fulla-iam、getfulla 等)或沿用 voidvec |
| 域名 | — | fulla.dev ✅ 已注册(2026-08-26);fulla.com ❌ 已被占 |
| PyPI | authforge-oauth2 在线(实测 HTTP 200) | 新包 fulla-oauth2(裸名 fulla 在 PyPI 也空,可考虑直接占);旧包可继续存在但应在新版描述中标注 deprecated |
| npm | 无已发布包 | 前端 oauth2-admin/oauth2-frontend 均非发布包,无影响。注意裸名 fulla 在 npm 被 2019 年死包占用——未来若发 JS SDK 用 fulla-sdk |
| Go module | github.com/voidvec/authforge/clients/go | 必须改为 github.com/voidvec/fulla/clients/go;旧路径靠 GitHub 301 短期可解析,不可长期依赖,旧版应打 deprecated 注释 |
| Docker 镜像 | ghcr.io/voidvec/authforge-{backend,frontend,admin} | GHCR 包名不随仓库改名自动迁移:新构建发布为 fulla-*,旧包留在原地;compose 拉取方需改引用 |
L2 C++ 源码标识符(机械替换的主体,但=公共 API 破坏)
- 命名空间:
namespace authforge覆盖 350 个文件(libs/ + apps/ + tests/); - 公共头文件路径:8 个目录
libs/{common,drogon,identity,oauth2,storage-memory,storage-postgres,storage-redis}/include/authforge/(含 testing)→ 所有#include <authforge/...>变更,SDK 消费方全破; - CMake:
project(authforge ...)(CMakeLists.txt:3)、目标authforge::*(如authforge::identity,CMakeLists.txt:57)、导出包cmake/AuthForgePackage.cmake+AuthForgePackageConfig.cmake.in、安装布局lib/cmake/authforge-*/(release.yml:8 注释); - 公共 CMake 选项(下游用户可见):
AUTHFORGE_WERROR、AUTHFORGE_ENABLE_LTO、AUTHFORGE_CMAKE_PRESET、AUTHFORGE_VERSION等; - 字符串字面量:Drogon 过滤器注册名 56 处(
"authforge::drogon::filters::AuthorizationFilter"×39、OAuth2AuthFilter×17 等)——与 config.json 零耦合(实测 filters 段为空),代码内自洽; - ORM 模型路径:
paths.env:68MODELS_INC_REL_DIR=include/authforge/storage/postgres/models——orm-gen 流程与生成的 include 路径联动; - conanfile.py:
AuthForgeConan类名与包引用。
L3 构建与二进制名
paths.env:46SERVER_BINARY_NAME=authforge-server、测试二进制authforge-tests(CI 多处默认值)+ 各库测试目标authforge-common-test、authforge-identity-test等(add_executable 实测 6+);- CMakePresets.json:LTO preset 描述与
AUTHFORGE_ENABLE_LTO缓存变量; - 所有构建缓存因路径/目标名变化全部失效,需清空重建。
L4 CI / 门禁
ci.yml:测试 exe 名(authforge-tests.exe)、AUTHFORGE_WERROR、SDK 头 SemVer 守卫(ci.yml:53,注释明言守卫libs/*/include/authforge)——改名触发该守卫,以 v1.0.0 新版本序列放行;_build-test.yml:docker 容器名authforge-postgres/authforge-redis(仅 CI 内部,无持久化影响);- api-diff 门禁:
tools/api-diff/api-baseline.txt含 820 处 authforge——基线是导出 API 符号快照,改名后 diff 会全量飘红;处理=重新生成基线 +--force批准(先例:backchannel logout PR 已有 drift 批准流程); release.yml:安装布局lib/cmake/authforge-*/、可能的 GHCR 发布名;arch_guard.py、api_diff.py工具自身的路径规则。
L5 运行时数据面(升级瞬间的影响)
| 项 | 现值 | 影响 |
|---|---|---|
| Redis 键前缀 | authforge:cache:token:access: / token:revoked: / token:introspect: / client: / user:* 等 | 前缀改 fulla: 后旧键全部孤儿化=一次性全量缓存失效,升级窗口内回源 DB 有小风暴(QPS 高时注意);旧键带 TTL 自然过期,无需清理脚本 |
| Prometheus 指标 | authforge_cache_total、authforge_cache_invalidation_failures_total | 指标名变更= Grafana 面板/告警规则同步改,否则监控盲窗 |
| 数据库 | oauth2_db / oauth2_user | 零影响 |
| cookie / issuer / JWT / UA | 无 authforge 字样 | 零影响,存量令牌与会话完全兼容 |
L6 部署与运维
deploy/docker/docker-compose.prod.yml:三镜像引用 +AUTHFORGE_VERSION环境变量名(5 处);- deploy/ 共 17 个文件(compose ×3、k8s manifests 等);
- k8s 部署中的镜像名/资源名(.qoder wiki 的 Kubernetes 部署页有 79 处,可作清单参考)。
L7 客户端 SDK(已发布工件)
- Python:
clients/python/pyproject.tomlname = "authforge-oauth2"(PyPI 实测在线)→ 新包fulla-oauth2;旧包发一个带 deprecation 说明的封版或仅改 README; - Go:module path 变更(见 L1);Go proxy 缓存旧路径版本,消费方
go get新路径即可,旧模块建议加// Deprecated:注释; - 前端:品牌文案/标题/e2e 断言/package.json 名的完整清单与陷阱见 §2bis A(8 文件 11 处);