Docmost 交付协作改造 — 本机运行

版本：基于 Docmost v0.96.0；本仓库只构建开源核心和新增 delivery、document-review 模块。
依赖：Node 26.12.0、pnpm 11.25.0、Docker Compose。请使用这些版本，不要使用系统旧 Node16。
从本仓库根目录执行：

1. 首次创建配置：node scripts/portfolio/init-local.mjs
   已有 .env 时脚本拒绝覆盖。APP_SECRET/数据库密码随机生成，文件权限0600。
2. 启动依赖：docker compose --env-file .env -f scripts/portfolio/compose.yaml up -d --wait
   独立项目 docmost-portfolio01，PostgreSQL:127.0.0.1:25418，Redis:127.0.0.1:26418。
   镜像以 digest 固定。只操作此 compose 项目；不要停止其他项目容器。
3. 安装：pnpm install --frozen-lockfile
4. 构建：pnpm build
   必须使用干净的 Git 提交，或未经修改且保留 source-export.json 的下载源码包。
   首先核对源码与企业源码/依赖边界，再构建 editor-ext、server、client，并生成
   与本次构建绑定的对应源码包。升级、无 .git 重建和故障处理见 source-release.txt。
5. 启动：pnpm --filter server start:prod
   服务仅监听127.0.0.1:3008；首次启动自动应用数据库迁移。
6. 浏览器打开 http://localhost:3008 ，空数据库走本机工作区初始化。
   不配置 SMTP 时使用上游本机邮件日志驱动，不会发送外部邮件。
7. 使用：进入拥有写权限的空间 → 交付文档 → 选择文档类型、项目名称、批次 → 创建并编辑。
   UI 创建顶层页面；API另支持父页，服务端校验同空间及父页写权限。
8. 评审：页面操作（右上角“…”）→ 评审与发布 → 选择另一位有编辑权限的成员 → 确认保存并提交。
   等待服务器确认标题和正文，最多60秒；内容变化或断线需重新确认。
   指定评审人查看静态快照后批准或带原因退回；退回后编辑草稿再发起新申请。
   有页面写权限的成员可以发布已批准快照，发布不会覆盖当前草稿，也不会开启匿名公网分享。
   只有当前仍有页面阅读权限的成员能查看快照和发布记录。

停止：在服务终端 Ctrl+C；docker compose --env-file .env -f scripts/portfolio/compose.yaml stop
不会删除数据卷。不要使用 down -v，除非确实准备清空这个本机演示的数据。
更新构建后需重启服务再刷新浏览器（静态文件路由在启动时登记）。

验证命令：
pnpm check:core
pnpm --filter client test
pnpm --filter server test --runInBand --testPathPatterns='document-review|page-access-fresh|delivery|page-create-transaction|permission-transaction|jwt-auth.guard'
DOCMOST_REVIEW_DRIVER_TEST=1 pnpm --filter server test --runInBand --testPathPatterns='document-review.driver'
最后一项需要本机 .env 和已启动 PostgreSQL，使用事务内临时影子表，不改业务表。

四个上游 should-be-defined 脚手架测试缺少依赖注入，已在原始SHA复现。
本批不会把全库Jest视为全部通过；具体日志见验收报告。

范围：这是本机演示。Dockerfile已去掉受限包依赖，但本批没有构建完整Docker应用镜像；
根docker-compose.yml保留上游参考，不能用于运行这份改造代码。请使用上面的已验证路径。
源码保留AGPL及第三方声明；应用已提供 /open-source 入口，任何访客无需登录或付费，
即可查看本次构建来源并下载通过完整性校验的对应源码。缺失或错配时禁用下载。
