diff --git a/AGENTS.md b/AGENTS.md index 404bdbc..e1776a4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,7 +24,7 @@ # GitNexus — Code Intelligence -This project is indexed by GitNexus as **a-share-analysis** (1520 symbols, 2137 relationships, 47 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. +This project is indexed by GitNexus as **a-share-analysis** (1577 symbols, 2199 relationships, 47 execution flows). Use the GitNexus MCP tools to understand code, assess impact, and navigate safely. > If any GitNexus tool warns the index is stale, run `npx gitnexus analyze` in terminal first. diff --git a/docs/features/GOV-009-application-scaffold-baseline/architecture-review.md b/docs/features/GOV-009-application-scaffold-baseline/architecture-review.md new file mode 100644 index 0000000..f8b027a --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/architecture-review.md @@ -0,0 +1,57 @@ +# 前后端项目架构复核与论证 + +- 复核基线:`95b8611bd9bbc282193591e472e2e19c617e5035` +- 状态:实现已验证,等待用户确认 + +## 实际落地结构 + +```text +repository +├── web/ Vue 3 独立工程 +│ └── src/ +│ ├── app/ 应用装配、路由和根视图 +│ ├── api/generated/ OpenAPI 自动生成类型 +│ ├── api/adapters/ 面向页面的稳定数据适配 +│ └── styles/ Sass 全局样式与后续 token 入口 +├── server/ NestJS 独立工程 +│ ├── apps/api/ HTTP 与 OpenAPI 入口 +│ ├── apps/scheduler/ 只负责任务触发的无 HTTP 进程 +│ ├── apps/worker/ 任务执行的无 HTTP 进程 +│ └── libs/ +│ ├── config/ 三进程最小权限配置契约 +│ ├── http-contracts/ Server DTO +│ ├── message-contracts/ Server 内部 RocketMQ 信封 +│ └── infrastructure/ Redis、MySQL、消息与生命周期适配 +├── deploy/ Compose、systemd、Nginx、env 模板 +└── tools/ 治理、Schema、契约、边界和部署验证 +``` + +## 为什么当前拆分合适 + +1. **前后端工程分开,但仓库不割裂。** Web 和 Server 有各自 package、构建与类型检查,责任清楚;根 workspace 只做质量编排。个人开发阶段仍能一次安装和验证,避免维护多个仓库与跨仓库版本同步。 +2. **不建立根共享 contracts 包。** HTTP 只有一个事实源:Server DTO 生成 OpenAPI,Web 再生成自己的类型。Web 无法直接引用 Server 源码,`.vue` 和 TypeScript 都有自动边界检查。这样比手工同步两份类型或共享内部类更明确。 +3. **一个 Server 工程、三个进程入口。** API、Scheduler、Worker 使用相同基础设施与消息契约,但启动、配置和部署彼此独立。当前规模下没有必要拆成三个仓库或三个重复 Nest 工程;未来可独立扩容进程而不复制公共代码。 +4. **配置是进程级最小权限。** API 不读取任务消费配置,Scheduler 不读取 MySQL/AI 密钥,Worker 不读取 API 端口。配置先校验和冻结,再通过动态模块注入,测试与生产使用同一装配路径。 +5. **基础设施通过 Adapter 隔离。** 业务代码将依赖 MessageBus、Repository 和数据源端口;RocketMQ 客户端尚未验证时明确禁用,避免以临时内存队列形成错误语义。 +6. **部署方式共享同一产物。** Ubuntu 源码部署使用 Web dist 与三个 Server dist 入口;现有 Docker Compose 只作为可选交付适配层复用这些产物,不形成第二套应用逻辑。按用户 2026-08-13 的决定,日常开发不再构建 Docker,待核心功能完成后再决定保留或移除。 + +## 适合下一阶段的扩展方式 + +- Web 市场概览应建立一个可连续阅读的 `features/market-overview/` 业务目录,内部按页面、数据适配和状态拆分;短线与中长线作为市场概览下的模式,不拆成两个独立应用。 +- Server 在 API/Scheduler/Worker 各入口内注册同一市场概览业务能力的不同适配面;共享领域模型和规则计算放入稳定业务库,HTTP DTO、消息 DTO 与数据库实体继续分离。 +- 用户体系、订阅和权限暂不加入当前业务模型;未来通过独立功能档案增加,不让其反向污染市场概览核心。 +- 当某个业务域出现独立发布节奏、团队所有权或明显扩容边界时,再论证拆包或拆服务;当前提前微服务化只会增加契约、部署和运维成本。 + +## 已知限制 + +- 当前 Web 只是工程外壳,没有市场概览 UI、行情图表和分析工作台。 +- RocketMQ 只有契约和禁用 Adapter,尚未选择并验证 Node 客户端。 +- TypeORM 已固定安全选项,但尚无业务实体和迁移。 +- 用户体系和订阅能力按用户决定后置,不在 GOV-009 范围。 +- Docker 交付方式尚未最终确认;现有文件和历史验证保留,但不能据此推定最终生产一定采用容器部署。 + +## 复核结论 + +现有架构适合“先做市场概览、个人使用为主、未来可扩展订阅”的阶段:边界清晰、运行方式简单、契约可自动校验,也保留 API/Scheduler/Worker 独立扩容路径。它不是不可变终局;完成市场概览真实业务后,仍应根据模块依赖和运行数据再次复核,而不是凭脚手架预判过度拆分。 + +用户确认本论证前,GOV-009 保持 `reviewing/unreleased`,不得创建 `v0.0.8` 标签。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/gitnexus/after.md b/docs/features/GOV-009-application-scaffold-baseline/gitnexus/after.md new file mode 100644 index 0000000..6935188 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/gitnexus/after.md @@ -0,0 +1,19 @@ +# GitNexus 开发后基线 + +- 记录时间:2026-08-13 GMT+8 +- 分支:`main` +- 实现提交:`95b8611bd9bbc282193591e472e2e19c617e5035` +- 远端:`origin/main` 已核对为同一 SHA + +```text +Repository: a-share-analysis +Indexed commit: 95b8611 +Current commit: 95b8611 +Status: up-to-date +Nodes: 1568 +Relationships: 2190 +Clusters: 46 +Execution flows: 47 +``` + +图谱已包含 Web、API、Scheduler、Worker、配置加载、健康检查、OpenAPI、消息信封、Schema、Docker 验证和治理门禁。GitNexus 本地索引未提交仓库。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/gitnexus/comparison.md b/docs/features/GOV-009-application-scaffold-baseline/gitnexus/comparison.md new file mode 100644 index 0000000..7b1dcc0 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/gitnexus/comparison.md @@ -0,0 +1,18 @@ +# GitNexus 前后对比 + +| 项目 | 开发前 `c04184a6` | 开发后 `95b8611` | 变化 | +| --- | ---: | ---: | ---: | +| 符号 | 958 | 1568 | +610 | +| 关系 | 1141 | 2190 | +1049 | +| 执行流程 | 23 | 47 | +24 | + +开发前仓库以治理文档、环境模板和 Schema 工具为主,Web/Server 仍无可运行应用。开发后形成以下新边界: + +- Vue 3 Web 可启动、测试、构建,并通过生成的 OpenAPI 类型访问 API。 +- NestJS API、Scheduler、Worker 为独立入口和独立配置容器。 +- Scheduler/Worker 具备可验证的持续运行与 SIGTERM 优雅关闭生命周期。 +- HTTP 契约由 Server DTO 单向发布;RocketMQ 消息信封只存在于 Server。 +- Docker Compose 与 Ubuntu 源码部署共用同一配置语义和构建产物。 +- Schema 空库、MySQL 5.7.42、契约漂移和 `.vue` 工程边界均有自动门禁。 + +新增关系数量符合“从占位目录建立应用基线”的预期。后续市场概览功能应在这些边界内增加业务模块,不应把 Web 与 Server 重新耦合。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/gitnexus/detected-changes.md b/docs/features/GOV-009-application-scaffold-baseline/gitnexus/detected-changes.md new file mode 100644 index 0000000..2b52f83 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/gitnexus/detected-changes.md @@ -0,0 +1,15 @@ +# GitNexus 变更检测 + +- 对比基线:`c04184a6111da0cfad90d1a265dc3cd3a6d90a9c` +- 实现提交:`95b8611bd9bbc282193591e472e2e19c617e5035` +- 检测命令:`npx gitnexus detect-changes --scope compare --base-ref c04184a6 --repo a-share-analysis` +- 变更范围:110 个文件、452 个符号、45 条执行流程 +- 风险:CRITICAL + +CRITICAL 来自一次建立完整 Web、API、Scheduler、Worker、契约生成、Schema 和部署验证链路,而不是单个未受控函数。主要流程为三进程配置加载、Schema 生成/验证、OpenAPI 发布、Web 客户端边界和 Docker/源码部署。 + +Review 整改前对具体符号分别执行上游影响分析:三进程 bootstrap、动态模块、消息信封、空库捕获和 MySQL 健康检查大多为 LOW;`assertMysql57Metadata` 因位于 Schema 发布门禁核心为 CRITICAL。该变更只把服务端补丁版本固定到 5.7.42,历史 `v0.0.7` 清单回归和 `schema:verify` 均通过。 + +最终代码复审补充发现无引号 Vue 外部 `script src` 可绕过早期正则门禁;影响分析为 LOW,只有 1 个直接调用者和 1 条边界检查流程。`95b8611` 改用 Vue 3.5.41 官方 SFC 解析器,并以单双引号、无引号和属性换序用例验证,未扩大应用运行影响面。 + +检测范围与开发前影响计划一致,未出现用户体系、生产数据库、外部消息写入或其他项目流程。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/implementation-plan.md b/docs/features/GOV-009-application-scaffold-baseline/implementation-plan.md index 82bdba8..db6e45f 100644 --- a/docs/features/GOV-009-application-scaffold-baseline/implementation-plan.md +++ b/docs/features/GOV-009-application-scaffold-baseline/implementation-plan.md @@ -609,3 +609,35 @@ Push current branch, compare local and remote SHA, create annotated tag `v0.0.8` - [ ] **Step 8: 刷新 GitNexus 并确认干净状态** Run `npx gitnexus status`; stale 时运行 analyze。最终要求工作区干净、`main` 与 `origin/main` 一致、远程 `v0.0.8^{}` 指向本地标签提交。 + +--- + +## 实际执行记录 + +### 已完成任务与远端提交 + +| Task | RED / GREEN 与验证摘要 | 提交 | 推送证据 | +| --- | --- | --- | --- | +| 1 Schema | 配置路径、固定远程白名单、历史 N/A 与空库用例先失败;实现后 Schema 27/27、治理 5/5、环境 7/7 | `b3d8e29` | 15:43:07 `origin/main update by push` | +| 2 Workspace | 运行时模块缺失先失败;Node 22/pnpm 10 门禁与 frozen install 后通过 | `258a2d2` | 15:54:08 推送 | +| 3 Web | App 缺失、模板 `import.meta.env` 与路由警告依次复现;Vitest、类型、构建、双视口 Playwright 后通过 | `28d5418`、`dcdf634` | 16:43:48、18:03:38 推送 | +| 4 三进程 | 配置条件与启动入口先失败;三个 Nest 入口和独立配置 Schema 后通过 | `3fc703d` | 16:59:12 推送 | +| 5 后端契约 | 消息、健康接口和 OpenAPI 先失败;Server 契约与只读客户端后通过 | `420aa22` | 17:26:53 推送 | +| 6 Web 契约 | Web 越界导入与 adapter 行为先失败;OpenAPI 生成客户端和边界门禁后通过 | `4665336` | 17:36:58 推送 | +| 7 部署 | Docker/systemd 产物断言先失败;双镜像、三入口和双部署文档后通过 | `c771a98` | 17:56:39 推送 | +| 8 Review 整改 | 生命周期、配置注入、消息字段、5.7.42、空库、SFC、漂移、代理与 Docker 集成均有 RED/GREEN;最终补齐未跟踪契约、Vue 官方 SFC 解析、镜像摘要和容器生命周期门禁;`pnpm verify` 通过,Docker 留存历史验证 | `3a8120a`、`cb550e3`、`95b8611` | 18:31:10、18:51:16、19:49:46 推送 | + +上述推送时间来自项目级 `origin/main` reflog;所有阶段均在提交后 1–83 秒内推送。提交摘要全部为包含 `GOV-009` 的中文 Conventional Commit。 + +### 计划状态 + +- Task 1–7:已实现、验证、提交并推送;原始步骤复选框保留为开发前计划,不反向改写预期命令和 RED 描述。 +- Task 8 Step 1–3、5:已完成全量验证、视觉证据、GitNexus 检测与发布/回退材料。 +- Task 8 Step 4:代码 Review 追加发现无引号外部脚本绕过,已用 Vue 官方 SFC 解析器整改;代码 Review 与规范 Review 最终结论均为 `passed`。 +- Task 8 Step 6:架构复核文档已生成,正在向用户论证并等待确认。 +- Task 8 Step 7:未执行;用户确认前禁止创建或推送 `v0.0.8`。 +- Task 8 Step 8:开发后图谱已刷新到 `95b8611`;最终档案提交后还需再次刷新并核对远端。 + +### Docker 后续执行口径 + +用户于 2026-08-13 决定:Docker 暂不作为后续日常开发与阶段验收的必跑项,待核心功能完整后再决定是否保留 Docker 部署。现有 Docker/Compose 文件与本次已通过的历史验证不删除;后续日常执行 `pnpm verify`,只有最终交付且用户确认继续采用 Docker 时才执行 `pnpm verify:docker` 或 `pnpm verify:release`。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/manifest.yaml b/docs/features/GOV-009-application-scaffold-baseline/manifest.yaml index f748132..bf95784 100644 --- a/docs/features/GOV-009-application-scaffold-baseline/manifest.yaml +++ b/docs/features/GOV-009-application-scaffold-baseline/manifest.yaml @@ -1,7 +1,7 @@ id: GOV-009 name: 应用工程脚手架基线 slug: application-scaffold-baseline -status: approved +status: reviewing owner: project created_at: 2026-08-13 prd: prd.md @@ -13,3 +13,4 @@ gitnexus_before: gitnexus/before.md gitnexus_impact: gitnexus/impact-plan.md release: unreleased completion_gate: 实施完成后必须基于实际前后端架构向用户论证并再次确认 +architecture_review: architecture-review.md diff --git a/docs/features/GOV-009-application-scaffold-baseline/qa/test-results.md b/docs/features/GOV-009-application-scaffold-baseline/qa/test-results.md new file mode 100644 index 0000000..5594106 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/qa/test-results.md @@ -0,0 +1,48 @@ +# 测试结果 + +- 日期:2026-08-13 +- 实现提交:`95b8611bd9bbc282193591e472e2e19c617e5035` +- 状态:passed + +## 测试先行证据 + +- 三进程配置 Token 缺失、Scheduler/Worker 启动后自行退出:RED;动态模块注入和生命周期锚点实现后 GREEN。 +- 消息信封缺少追溯字段、MySQL 接受 5.7.41、真实空库 dump 被误判:RED;完整信封、5.7.42 固定和对象计数判空后 GREEN。 +- `.vue` 越界导入未被发现、Vite 无 `/api` 代理:RED;SFC 脚本扫描和同源代理后 GREEN。 +- 契约漂移验证模块不存在:RED;生成后限定路径 Git diff 与 Git 跟踪门禁后 3/3 GREEN。 +- Vue 外部 `script src`、可变镜像标签和干净 checkout 生命周期用例依次 RED;禁止外部脚本、摘要校验与公开生产 fixture 实现后 GREEN。 +- Playwright 访问真实健康接口时代理连接拒绝:RED;同时启动测试 API 并复用可用本机 Redis 后 GREEN。 + +## 完整验证 + +`pnpm verify`:passed。 + +- 运行时:Node.js 22.11.0、pnpm 10.25.0。 +- 治理:5/5。 +- MySQL 架构规范:2/2。 +- 环境与部署契约:11/11。 +- Schema 基线:28/28;`v0.0.7 (not_applicable)` 验证通过。 +- 生成契约漂移:3/3;OpenAPI 与 Web 生成类型同步,未跟踪生成物会阻断。 +- 工程边界:8/8,包含 Vue SFC 内联脚本,以及外部脚本单双引号、无引号和属性换序越界用例。 +- 生产镜像引用:5/5;拒绝空值、`latest`、普通 tag 和裸摘要。 +- Web Vitest:8/8。 +- Server Vitest:30/30,包含 API/Scheduler/Worker 与两个真实子进程生命周期用例。 +- Web、API、Scheduler、Worker 生产构建:passed。 +- Playwright:桌面/移动共 4/4;页面外壳与 Web → Vite → Nest API 健康链路均通过。 +- `git diff --check`、ESLint、Prettier、TypeScript:passed。 + +`pnpm verify:docker`:passed。 + +该结果是 2026-08-13 已完成的历史交付验证。按用户随后决定,Docker 不再作为日常开发必跑项;核心功能完成后再决定是否保留 Docker 部署,并仅在最终交付阶段按需重跑。 + +- Web 与 Server 多阶段镜像真实构建成功。 +- Server 镜像以 `node` 非 root 用户运行。 +- API、Scheduler、Worker 三个镜像入口存在;Scheduler/Worker 均在容器内持续运行,并在 `SIGTERM` 后退出码为 0。 +- 隔离容器内 Redis/API/Web 启动,API 健康 200、Web 首页和 Nginx `/api` 代理通过。 +- 临时容器、网络和验证镜像已清理。 + +## 本机与固定开发基础设施 + +- 本机 Redis `127.0.0.1:6379` 的 DB 0、1、2 分别执行只读 `PING`,三次均返回 `PONG`;未读取或修改业务键。 +- 固定开发 MySQL 只读会话返回 `5.7.42-0ubuntu0.18.04.1`、库 `a_share_analysis_dev`、`utf8mb4`、`utf8mb4_general_ci`、会话时区 `+08:00`;Task 1 对象计数为 0。密码只通过临时进程环境传递,未输出或写入命令参数;未连接、探测或读取生产数据库。 +- 本机 RocketMQ 只读 TCP 可达性复核:NameServer `127.0.0.1:9876`、Broker `127.0.0.1:10911`、Proxy `127.0.0.1:8081` 均可达。Node Adapter 仍保持禁用,没有创建 Topic、消费或发送消息。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/qa/visual-qa.md b/docs/features/GOV-009-application-scaffold-baseline/qa/visual-qa.md new file mode 100644 index 0000000..b2d1fc3 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/qa/visual-qa.md @@ -0,0 +1,21 @@ +# 视觉 QA + +- 日期:2026-08-13 +- 浏览器:Playwright Chromium +- 状态:passed + +## 桌面 1440 × 900 + +- 证据:`../screenshots/iterations/app-shell-ready-1440x900-3a8120a.png` +- SHA-256:`79b3ef53178c9d35fc10b75aac2d844d34c886d4e2faab69762922f4cda17802` +- 顶部品牌栏、应用标题和“工程基线已就绪”可见。 +- `main` 可见,无水平溢出、控制台 warning/error 或页面异常。 + +## 移动 390 × 844 + +- 证据:`../screenshots/iterations/app-shell-ready-390x844-3a8120a.png` +- SHA-256:`12f56ae24d51c64b1e0dfc03a8a2e3538e5ce5a7a33c2863f9bff5d53efe3d1d` +- 品牌栏与正文在窄屏正常换行和留白,无水平溢出。 +- 无控制台 warning/error 或页面异常。 + +当前画面仅证明工程外壳与响应式基线,不代表市场概览产品视觉已经完成;市场概览页面将在后续功能档案中单独设计、实现和验收。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/release-notes.md b/docs/features/GOV-009-application-scaffold-baseline/release-notes.md new file mode 100644 index 0000000..36222a6 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/release-notes.md @@ -0,0 +1,15 @@ +# 发布说明 + +GOV-009 建立了可运行的应用工程基线: + +- 根 pnpm workspace 编排独立的 Vue 3 Web 与 NestJS Server 工程。 +- Server 提供 API、Scheduler、Worker 三个独立入口、最小权限配置和优雅关闭生命周期。 +- HTTP 契约由 Server DTO/OpenAPI 单向生成 Web 客户端;RocketMQ 消息契约保持 Server 内部。 +- Redis/MySQL 只读健康检查、TypeORM MySQL 5.7.42 基线和 RocketMQ 禁用 Adapter 已建立。 +- 开发/生产模板、Docker Compose、Ubuntu systemd/Nginx 与源码部署路径已对齐。 +- Schema 支持固定远程开发库与真实空库 `captured_empty`,历史清单保持不可变。 +- 新增契约漂移、Vue SFC 边界、三进程生命周期、Playwright 真实 API 和 Docker 集成门禁。 + +当前状态为 `reviewing/unreleased`。实现提交已推送至 `origin/main`,但按用户要求,必须完成基于真实实现的架构论证并再次确认后才能创建和推送 `v0.0.8` 标签。 + +Docker Compose 当前降级为待定的可选交付能力:保留既有文件和历史验证,不进入后续日常开发必跑流程;核心功能完成后由用户决定最终保留 Docker 还是仅采用源码部署。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/review/code-review.md b/docs/features/GOV-009-application-scaffold-baseline/review/code-review.md new file mode 100644 index 0000000..1a00347 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/review/code-review.md @@ -0,0 +1,24 @@ +# 代码 Review + +- 审查范围:`c04184a6111da0cfad90d1a265dc3cd3a6d90a9c..95b8611bd9bbc282193591e472e2e19c617e5035` +- 审查方式:独立只读复审 +- 日期:2026-08-13 + +## 发现与处置 + +第一轮发现三进程生命周期依赖本地 env、未跟踪生成契约可绕过漂移检查、Vue 外部脚本可绕过边界、生产镜像允许可变 tag,以及 Docker 未验证镜像内 Scheduler/Worker 生命周期。上述问题已在 `cb550e3` 完成整改并通过针对性测试。 + +最终复审进一步发现早期外部脚本正则不能识别合法的无引号 `src` 属性。GitNexus 单符号影响分析为 LOW,只有 `verifyProjectBoundaries` 一个直接调用者和一条边界检查流程。`95b8611` 改用固定版本 `@vue/compiler-sfc@3.5.41`,直接拒绝普通脚本或 setup 脚本的外部 `src`,测试覆盖双引号、单引号、无引号和属性换序,边界用例 8/8 通过。 + +## 最终证据 + +- `pnpm verify` 完整通过:静态检查、类型、全部测试、Web/Server 构建和 Playwright 4/4。 +- 契约漂移 3/3、工程边界 8/8、镜像引用 5/5、Web 8/8、Server 30/30。 +- Scheduler/Worker 的源码子进程生命周期使用公开 production fixture,可在干净 checkout 复现。 +- HTTP 契约保持 Server DTO → OpenAPI → Web 单向发布;RocketMQ 消息契约只在 Server 内部。 +- 未发现新的配置泄漏、安全、生命周期、错误处理或生产风险。 +- Docker 是已验证过的历史可选交付能力;按用户决定不再作为后续日常门禁,最终开发完成后再决定是否保留。 + +Critical、Important、Minor 均无未关闭问题。 + +最终结论:passed diff --git a/docs/features/GOV-009-application-scaffold-baseline/review/standards-review.md b/docs/features/GOV-009-application-scaffold-baseline/review/standards-review.md new file mode 100644 index 0000000..f049052 --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/review/standards-review.md @@ -0,0 +1,21 @@ +# 开发规范符合性 Review + +- 审查范围:`c04184a6111da0cfad90d1a265dc3cd3a6d90a9c..95b8611bd9bbc282193591e472e2e19c617e5035` +- 审查方式:独立只读复审 +- 日期:2026-08-13 + +## 规范核对 + +- 所有 GOV-009 实现提交均为包含功能编号的中文 Conventional Commit,并在验证后及时推送 Gitea。 +- GitNexus 前置、影响分析、开发后索引和前后对比完整;最终索引提交为 `95b8611`。 +- 公共导出、契约字段、安全边界和架构取舍均有准确中文注释,未发现无意义逐行注释或过度拆分。 +- MySQL 固定为 5.7.42、`utf8mb4`、`utf8mb4_general_ci` 和 `+08:00`;Schema 流程只允许固定开发库和白名单主机。 +- Redis DB 0/1/2 均只读 `PING` 成功;RocketMQ NameServer/Broker/Proxy 均只读验证可达,未创建 Topic 或发送消息。 +- 截图位于 `screenshots/iterations/`,文件名包含页面、状态、视口和实现版本,文档引用与 SHA-256 一致。 +- 未发现密钥、真实 env、生产数据或 GitNexus 本地索引被 Git 跟踪。 +- Docker 最新决定已统一记录为历史验证、可选交付、非日常必跑,不篡改此前真实验证记录。 +- manifest 保持 `reviewing/unreleased`,本地与远端均不存在 `v0.0.8`。 + +Critical、Important、Minor 均无未关闭问题。 + +最终结论:passed diff --git a/docs/features/GOV-009-application-scaffold-baseline/rollback.md b/docs/features/GOV-009-application-scaffold-baseline/rollback.md new file mode 100644 index 0000000..0ccb5ea --- /dev/null +++ b/docs/features/GOV-009-application-scaffold-baseline/rollback.md @@ -0,0 +1,17 @@ +# 回退说明 + +GOV-009 没有创建业务表、执行迁移、写入生产数据库、创建 RocketMQ Topic 或发送消息。回退重点是应用代码与部署产物,不包含数据回滚。 + +## 代码回退 + +- 以中文 Conventional Commit 新建回退提交,按逆序撤销 GOV-009 提交;禁止 `reset --hard`、强推或改写 Gitea 历史。 +- 若只回退 Review 整改,目标提交为 `3a8120a33aff3fc4e1f73059eed78d88d57d33a2`,必须同时恢复消息契约、三进程生命周期、契约漂移和部署门禁,禁止形成半套状态。 +- 若整体移除脚手架,回到基线 `c04184a6111da0cfad90d1a265dc3cd3a6d90a9c` 的等价内容,并保留既有 `v0.0.7` Schema 历史目录。 + +## 部署回退 + +- Docker 恢复上一组 Web/Server 不可变镜像摘要;源码部署把 `/opt/a-share-analysis/current` 切回上一完整发布目录并重启三个 systemd 服务。 +- `/etc/a-share-analysis/*.env`、本地 `*.env.local`、Redis、MySQL 和 RocketMQ 数据不随应用回退覆盖或删除。 +- 回退后重新执行健康检查、契约门禁和可用性验证。 + +当前尚未创建 `v0.0.8` 标签,因此无需删除或移动标签。用户确认发布后,若发布回退也只能新建更高版本修复或明确的回退提交,不能移动已推送标签。 diff --git a/docs/features/GOV-009-application-scaffold-baseline/screenshots/iterations/app-shell-ready-1440x900-3a8120a.png b/docs/features/GOV-009-application-scaffold-baseline/screenshots/iterations/app-shell-ready-1440x900-3a8120a.png new file mode 100644 index 0000000..7aa6109 Binary files /dev/null and b/docs/features/GOV-009-application-scaffold-baseline/screenshots/iterations/app-shell-ready-1440x900-3a8120a.png differ diff --git a/docs/features/GOV-009-application-scaffold-baseline/screenshots/iterations/app-shell-ready-390x844-3a8120a.png b/docs/features/GOV-009-application-scaffold-baseline/screenshots/iterations/app-shell-ready-390x844-3a8120a.png new file mode 100644 index 0000000..a9f3f95 Binary files /dev/null and b/docs/features/GOV-009-application-scaffold-baseline/screenshots/iterations/app-shell-ready-390x844-3a8120a.png differ