diff --git a/README.md b/README.md index df4096091..008a1c312 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ tests/ Playwright e2e and route-level tests - [运维与质量门禁](docs/operations.md) - [系统架构说明](docs/architecture.md) - [发布就绪检查清单](docs/release-readiness.md) +- [交付就绪审查摘要](docs/delivery-readiness-audit.md) - [依赖风险登记](docs/dependency-risk-register.md) - [安全策略](SECURITY.md) - [贡献指南](CONTRIBUTING.md) diff --git a/docs/delivery-readiness-audit.md b/docs/delivery-readiness-audit.md new file mode 100644 index 000000000..6591e0da6 --- /dev/null +++ b/docs/delivery-readiness-audit.md @@ -0,0 +1,66 @@ +# yedir-ai 交付就绪审查摘要 + +日期:2026-05-27 + +本文档记录当前分支进入 PR / 商业化交付前的审查入口。它不是替代 CI 的结论,而是帮助 reviewer 快速理解本轮大改的边界、验证证据和剩余远端动作。 + +## 当前分支状态 + +- 工作分支:`codex/admin-settings-ui-refactor` +- 基线分支:`github/main` +- 当前状态:`behind 0 / ahead 72` +- 本地工作区:干净 +- Dry-run merge:`mergeConflictMarkers: 0` +- 当前 PR 体量:约 `191` 个文件变更,`71` 个非 merge 提交 + +## 主要交付范围 + +- 后台设置页:本地 AI 设置拆出导航、命令中心、section shell、状态 badge、领域 section 组件和共享类型,降低巨型设置页维护成本。 +- 旧 Chat 清理:首页固定 Lovart 新首页,`/classic` 与 `/chat/[id]` 旧 UI 入口重定向到 `/`,`/api/chat` 保留为 Canvas/Agent 内部生成 API。 +- 首页性能:Lovart 首页改为轻量壳优先,公开首页接口增加缓存、fallback、超时和基础性能观测。 +- Canvas / Chat 工程化:拆分 `LovartHome`、`ImageNode`、`CanvasChatPanel` 和 `/api/chat` 的多个纯逻辑/展示模块,保留业务协议与调用方行为。 +- 日志安全:新增结构化 logger、客户端 logger、脱敏工具和分批日志门禁,覆盖高风险 provider、上传、认证、Canvas 和部分生成链路。 +- 仓库治理:清理 tracked 本地污染物,补齐 `.gitignore`、CI hygiene、secret/env/package metadata/test hygiene、dependency audit、release verification 和 branch readiness 检查。 +- 文档交付:README、部署、运维、架构、安全、贡献、支持、发布清单和依赖风险登记已按 `yedir-ai` 项目定位重写或补齐。 + +## 已验证证据 + +```bash +git fetch github main --prune +pnpm check:branch +SMOKE_BASE_URL=http://127.0.0.1:3001 pnpm verify:release +``` + +最近一次本地验证结果: + +- `pnpm check:branch` 通过,`behind 0 / ahead 72`,`mergeConflictMarkers: 0`。 +- `pnpm check:quality` 通过,覆盖 lint、日志脱敏、品牌、CI、env、secret、metadata、测试卫生、helper 测试、TypeScript、diff hygiene 和 tracked artifact。 +- `pnpm audit:security` 通过 high/critical 门槛;当前剩余 `1 low / 44 moderate`。 +- `pnpm smoke:routes` 通过: + - `/` 返回 `200` + - `/classic` 返回 `307` 到 `/` + - `/chat/test-id` 返回 `307` 到 `/` + - `/settings` 未登录返回 `307` 到 `/login?callbackUrl=%2Fsettings` + +## Reviewer 建议审查顺序 + +1. 先看仓库治理与 CI:`package.json` scripts、`.github/workflows/*`、`scripts/check-*.mjs`、`docs/release-readiness.md`。 +2. 再看产品入口变化:`app/(chat)/page.tsx`、`app/(chat)/classic/page.tsx`、`app/(chat)/chat/[id]/page.tsx`、`components/home/*`。 +3. 然后看设置页工程化:`app/(admin)/settings/_components/*`、`app/(admin)/settings/_lib/*`、`admin-settings-client.tsx`。 +4. 再看核心模块拆分:`app/(chat)/api/chat/_lib/*`、`components/canvas/chat-panel/*`、`components/canvas/nodes/image-node/*`。 +5. 最后看日志治理和风险面:`lib/observability/*`、`scripts/check-log-hygiene.mjs`、高风险 API route 的 logger 替换。 + +## 剩余远端动作 + +- Push 当前分支到 GitHub。 +- 创建 PR,并在 PR 描述中粘贴本地验证证据。 +- 等待 GitHub Actions:基础质量门禁、dependency audit、Playwright workflow。 +- 根据 PR diff 做最后一次人工审查;如 GitHub Actions 与本地结果不一致,以远端 CI 为准处理。 + +## 当前不包含的范围 + +- 不删除数据库历史 Chat / Message / Vote / Stream 数据结构。 +- 不把 `/api/chat` 迁移为公开 API;它仍是内部生成链路。 +- 不把所有历史 `console.*` 一次性清零;日志治理采用高风险链路分批纳管。 +- 不解决所有 moderate / low 依赖告警;高/critical 是当前阻断线,剩余项由依赖风险登记持续跟踪。 +- 不做法律层面的商业许可证调整;License 仍以仓库根目录 `LICENSE` 为准。