Skip to content

chore: 锁定 Neo4j 镜像版本并补充第三方组件许可证边界说明 - #922

Draft
Yuchuan925 wants to merge 3 commits into
xerrors:mainfrom
Yuchuan925:chore/873-image-license-compliance
Draft

chore: 锁定 Neo4j 镜像版本并补充第三方组件许可证边界说明#922
Yuchuan925 wants to merge 3 commits into
xerrors:mainfrom
Yuchuan925:chore/873-image-license-compliance

Conversation

@Yuchuan925

@Yuchuan925 Yuchuan925 commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

变更说明

  • 任务类型:process
  • 目标:解决 [合规] docker-compose 使用的 MinIO(AGPL-3.0)与 neo4j 社区版(GPL-3.0)镜像许可证需审查 #873 —— ① 全部 Neo4j 镜像引用(6 处)从浮动 tag neo4j:5.26 锁定为精确补丁 neo4j:5.26.28;② 全部 Redis 镜像引用(4 处)从浮动 tag redis:7-alpine 锁定为 redis:7.4.9-alpine;③ 在 docs/advanced/deployment.md 新增「第三方组件与许可证」章节,明确组件许可证对照、再分发/托管义务边界与商业部署选项;④ 中英文 README 许可证节各加一行指向该章节;⑤ 新增 implemented 决策记录;⑥ PR 模板「验证情况」由六列宽表改为逐条分组格式,治理文档措辞联动修正。
  • 非目标:不替换存储组件、不默认引入 Enterprise 镜像、不新增 CI 许可证审计([CI] 无依赖漏洞与许可证审计步骤,copyleft 依赖可静默混入 #870 承接)、不锁定 PostgreSQL 版本。
  • substantial / trivial 判断:无运行时行为变化(Neo4j 5.26.28 即当前部署实际运行的补丁版本,锁定消除的是已发生的事实漂移——Docker Hub 的 neo4j:5.26 已指向 5.26.29;Redis 7.4.9-alpine 与当前 redis:7-alpine 同 digest 6ab0b6e7,为零变更锁定)。模板调整为呈现格式变化,验收字段一个不少。因涉及可重开的合规取舍,附 implemented 决策记录;属小而完整、同变更生效、无待裁决替代,故未先建 proposed。

工程主张与 Owner

  • 受影响的工程主张:① Compose 拉取的 Neo4j / Redis 镜像在任何时间解析为同一版本与同一许可证(可复现清单);② 第三方组件许可证与再分发边界有单一可引用的书面 Owner;③ GPL/AGPL 组件保持未修改、进程间聚合使用,MIT 本体不受传染;④ PR 验证情况的呈现格式与治理文档表述一致。
  • Owner / commit point / 观察边界:镜像清单事实由 docker-compose.yml(prod 镜像)拥有,docker-compose.prod.yml 与各拉取/导出脚本同步同一引用;许可边界陈述由 docs/advanced/deployment.md 拥有;PR 呈现契约由 .github/PULL_REQUEST_TEMPLATE.md 拥有;取舍由决策记录固化。
  • 决策记录:docs/develop-guides/decisions/implemented/2026-08-17-thirdparty-image-license-boundary.md(直接 implemented 的理由见变更说明);同步修正 2026-08-16-yuxi-spec-loop.md 中「PR 与决策记录用同一份矩阵」的表述。

验证情况

全部 Neo4j 引用锁定且 Compose 可解析

  • 失败面:浮动标签漂移导致不同时间部署不同补丁
  • 语义 Owner:docker-compose.yml
  • 直接证据 / 命令:grep -rn neo4j:5.26(6 处已锁);docker compose config -q;prod 以占位 --env-file 解析出 image: neo4j:5.26.28
  • 负向案例:残留检查仅余文档 Enterprise 示例与 ADR 叙述;浮动 5.26 实测已解析 5.26.29(digest d9dd3dc7ff32db30
  • 结果:Passed

全部 Redis 引用锁定且与运行版本同 digest

  • 失败面:浮动 tag 跨 7.2(BSD-3)/ 7.4(RSALv2·SSPLv1)许可证边界,部署取得的许可证随拉取时间变化
  • 语义 Owner:docker-compose.yml
  • 直接证据 / 命令:docker pull redis:7.4.9-alpine 与本地 redis:7-alpine digest 同为 6ab0b6e7;全仓 grep 无代码引用残留(仅 ADR 叙述);dev/prod compose 均解析出 image: redis:7.4.9-alpine
  • 负向案例:Redis 7.4 许可证变更后浮动 tag 无感漂移,正是锁定要防的缺陷
  • 结果:Passed

锁定版本与现部署一致且真实栈可运行

  • 失败面:pin 到不兼容版本破坏既有数据卷或运行链路
  • 语义 Owner:docker-compose.yml
  • 直接证据 / 命令:docker compose up -d graph 重建后 healthy、cypher 返回数据;docker compose up -d redis 重建后 healthy,/api/system/ready 恢复 ready(redis/postgres/worker 检查全 ok)
  • 负向案例:redis 重建暴露 arq worker 不自动重连(既有特性,重启 worker 恢复,与本 pin 无关),已按此事实在 deployment.md 补充「重建 Redis 后重启 worker」运维说明
  • 结果:Passed

文档许可边界与真实拓扑一致

  • 失败面:错误许可表述误导部署者
  • 语义 Owner:docs/advanced/deployment.md
  • 直接证据 / 命令:与 Compose、docker/mineru.Dockerfile 注释逐项对照;独立 Review 复核
  • 负向案例:Review 捕获 MinerU「同为 AGPL」错误(实际 3.4.4 为 Apache-2.0 基础的 MinerU 开源许可)与 RSALv2/SSPLv1 双路径表述混写,均已修正
  • 结果:Passed

模板调整无隐性工具依赖且治理表述一致

  • 失败面:脚本或 CI 解析 PR 模板表格结构,或治理文档与新格式矛盾
  • 语义 Owner:.github/PULL_REQUEST_TEMPLATE.md
  • 直接证据 / 命令:verify_engineering_contracts.py 的六列矩阵头仅校验 proposed 决策记录,不解析 PR 模板;.github/workflows/ 无模板结构依赖(独立 Review grep 确认);spec-loop ADR 与 contributing.md 措辞已联动修正
  • 负向案例:不适用(Review 全仓检索了模板结构依赖,未发现消费者)
  • 结果:Passed

文档与契约检查不回归

  • 失败面:死链 / 决策记录格式违规
  • 语义 Owner:docs/、decisions
  • 直接证据 / 命令:docs pnpm build 完成(死链即失败);python3 scripts/verify_engineering_contracts.py 通过(5 decisions);python3 -m unittest scripts.test_verify_engineering_contracts 48 OK
  • 负向案例:契约脚本曾拒绝本 PR 早期 Owner 多路径写法,修正后通过
  • 结果:Passed

unit 测试不回归

  • 失败面:不适用(无 Python 代码改动)
  • 语义 Owner:backend
  • 直接证据 / 命令:docker compose exec api uv run --group test pytest test/unit -m "not slow"
  • 负向案例:不适用
  • 结果:Passed(1285 passed / 12 skipped)

不涉及 Run/FIFO/SSE/沙盒等 assembled path 的行为变更;真实 Compose 栈验证见「锁定版本与现部署一致」一条。

简化 / 删除验收

不涉及。

独立语义 Review

两轮全新上下文 Reviewer Agent 审查。第一轮(Neo4j 锁定 + 许可证文档):1 个中等事实错误(MinerU 许可证)与 2 个轻微问题均已修复。第二轮(Redis 锁定 + 模板逐条分组):结论可提交;2 个 P3(contributing.md「证据矩阵」措辞未联动、RSALv2/SSPLv1 双路径表述混写)与 P4 建议(模板字段名与结果占位)均已修复;并确认 worker 断连为既有特性、verify 脚本与 CI 均不解析 PR 模板结构。无未解决项。

未验证范围与风险

  • 未咨询法务;文档已注明「工程侧整理,不构成法律意见」。
  • MinerU 许可证表述依据仓库 Dockerfile 注释口径(3.1.0+ = Apache-2.0 + 附加条款),未逐字核对上游 LICENSE 全文;RSALv2/SSPLv1 细节以 Redis 官方许可页为准。
  • 未实际执行 Neo4j Enterprise 切换(仅文档指引);未在真实生产环境部署 prod compose(仅配置解析验证)。
  • Windows 下两个 .ps1 仅同步镜像字符串,未实际运行。
  • PostgreSQL 仍为浮动 tag,按非目标保留,可另行锁定。

事故反馈

不涉及。

界面变更

不涉及。

关联事项

Closes #873

补充说明

  • 锁版本后补丁升级需显式修改引用(Neo4j 6 处、Redis 4 处),决策记录已写明该代价。
  • 本地开发栈 graph 与 redis 容器已在验证中重建至锁定镜像(数据不变,healthy;redis 重建后按新补充的运维说明重启了 worker,ready 恢复)。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[合规] docker-compose 使用的 MinIO(AGPL-3.0)与 neo4j 社区版(GPL-3.0)镜像许可证需审查

1 participant