docs: add spec for organizing derivative tools under tools/

Establishes a tools/ top-level directory for derivative tooling (WareShipManifest, attachmentQRCodeGenerator) as submodules, with a README convention for adding future tools.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-08-10 11:24:59 +08:00
parent ad2f318f80
commit fdb3166040

View File

@@ -0,0 +1,99 @@
# 衍生工具目录组织设计
> 日期:2026-08-10
> 状态:已确认,待实施
## 背景
CargoTrace 主仓库(Monorepo + Git Submodule)目前有三类内容:
- `apps/pad_scanner`(Flutter 端,submodule)
- `services/fastapi`(后端,submodule)
- 衍生工具:`WareShipManifest`(装箱单报表,submodule)、`attachmentQRCodeGenerator`(Excel/VBA 标签工具,游离仓库)
衍生工具存在两个组织问题:
1. **层级不一致**:`apps/``services/` 是分类目录,而 `WareShipManifest` 直接躺在根目录,未进任何分类层级。
2. **`attachmentQRCodeGenerator` 三不管**:它有自己的 `.git`,但主仓库不跟踪它(`git ls-files --error-unmatch` 报错),不在 `.gitmodules` 中,且无任何 remote。
随着未来工具持续增加,根目录堆放将愈发混乱。需要为衍生工具建立统一的组织约定。
## 目标
- 为所有衍生工具建立统一的 `tools/` 顶层目录与纳入流程。
- 把现有两个工具迁入 `tools/`,并将游离的 `attachmentQRCodeGenerator` 纳入版本管理。
- 形成可复用的「新增工具」约定,供后续工具遵循。
## 决策
经讨论确定两项根本决策:
1. **Git 归属**:所有衍生工具统一作为 **submodule**(独立 git 仓库)引入,与现有 `apps/``services/` 的 monorepo + submodule 模式一致。主仓库只跟踪版本指针,工具可独立开发与发布。
2. **命名与分层**:`tools/` 扁平存放,**保留各工具原名**(不强制 snake_case)。匹配当前规模,迁移成本最低。
## 目标结构
```
CargoTrace/
├── apps/pad_scanner/ (submodule, 不变)
├── services/fastapi/ (submodule, 不变)
├── tools/ ← 新增顶层目录
│ ├── README.md ← 工具清单 + 纳入流程
│ ├── WareShipManifest/ (submodule, 从根目录迁入)
│ └── attachmentQRCodeGenerator/ (submodule, 游离仓库转正)
├── docs/
└── README.md
```
所有衍生工具作为 submodule 存于 `tools/<原名>/`
## 迁移方案
### WareShipManifest(已是 submodule,迁路径)
- 从根目录 `WareShipManifest/` 迁至 `tools/WareShipManifest/`
- 性质:submodule **路径变更**,需更新 `.gitmodules``path` 字段并同步 git 索引,**不是**简单 `mv`
- ⚠️ **URL 隐患**:`.gitmodules` 中该 submodule 的 URL 为 `git@gitea.server10086.icu:CargoTrace/WareShipManifest.git`,而子仓库实际 remote 指向 `git@gitea.misdev.icu:CargoTrace/WareShipManifest.git`。实施时需核实两个域名是否指向同一 Gitea 实例,并统一 `.gitmodules` URL,避免 `git submodule update --init` 拉错源。
- 子仓库当前默认分支为 `main`,与 `apps/``services/``master` 不一致(记录,本次不强改)。
### attachmentQRCodeGenerator(游离仓库转正)
- 现状:有独立 `.git`,主仓库不跟踪,无 remote。
- 三步:
1. 在 Gitea(`CargoTrace` 组织下)建独立仓库。
2. 为本地仓库设 remote,推送现有提交历史。
3. 在主仓库执行 `git submodule add <url> tools/attachmentQRCodeGenerator`,纳入管理。
- ⚠️ **备份文件**:目录内含 7 个 `*.bak.*.xlsm` 备份。建仓时需定 `.gitignore`,建议忽略 `.bak` 文件,仅纳入当前 `压力表标签查询打印_界面预览.xlsm``附件标签-刘洪.btw` 以及 `VBA-Excel/` 源码。
## tools/README.md 约定
新增 `tools/README.md`,内容包括:
- **工具清单表**:名称 / 用途 / 技术栈 / 仓库链接 / 状态。
- **新增工具流程**:
1. Gitea 建独立仓库。
2. `git submodule add <url> tools/<name>`
3.`tools/README.md` 登记一行。
- **更新工具**:`git submodule update --remote tools/<name>`,或进入子目录 `git pull`
- **工具内部约定**:各工具自行维护 `.venv` / `requirements.txt` / `CLAUDE.md`,与 `apps/``services/` 子项目一致。
## 范围边界(YAGNI)
本次**不做**:
- `tools/` 二级分类(扁平结构够用;待工具增至约 8 个再按用途细分)。
- 统一各工具的分支策略(各工具 CLAUDE.md 已有约定,如 pad_scanner/fastapi 用 master + dev)。
- 调整 `apps/``services/` 现有结构。
## 风险与核实项
| 项 | 说明 | 处置 |
|---|---|---|
| submodule URL 不一致 | WareShipManifest 的 `.gitmodules` URL 与实际 remote 不同 | 实施前核实 Gitea 域名,统一 |
| 游离仓库历史 | attachmentQRCodeGenerator 现有 `.git` 历史是否保留 | 默认保留并 push;若含敏感信息需先清理 |
| 备份文件体积 | 7 个 `.bak` xlsm 二进制 | `.gitignore` 忽略 `.bak` |
| submodule 路径迁移 | 直接 `mv` 会破坏 submodule 登记 | 用 `.gitmodules` + 索引同步方式,非 `mv` |
## 后续
本设计确认后,进入实施计划(writing-plans),产出可逐步执行的任务清单。