0001-Sprint1规划会议-会议纪要 » 历史记录 » 版本 1
Huarui Lin, 2026-04-13 12:50
| 1 | 1 | Huarui Lin | |
|---|---|---|---|
| 2 | # Sprint 1 规划会议纪要:工程脚手架与架构护栏落地 |
||
| 3 | |||
| 4 | **会议日期**:2026-04-11 |
||
| 5 | **项目名称**:基金量化定投选基系统 (2026-04-11-01) |
||
| 6 | **会议目标**:锁定 M1 交付标准,对齐 NFRs 与跨团队依赖,输出首版架构决策记录(ADR),确立“规约即代码”的零偏移基线。 |
||
| 7 | **参会角色**:项目经理(Henry Lin)、算法/研发工程师、基础架构/运维工程师、数据资产管理员。 |
||
| 8 | |||
| 9 | --- |
||
| 10 | ## 一、 会议确认项 |
||
| 11 | |||
| 12 | 1. **CONF-01 结构化日志 Schema 强制约束**:`logging.py` 必须强制输出包含 `timestamp`, `level`, `module`, `step`, `message` 的 JSON 格式日志,作为后续全链路审计唯一合法格式。 |
||
| 13 | 2. **CONF-02 凭证与敏感信息架构隔离**:`config.yaml` 永远仅存放非敏感业务参数。任何敏感信息必须通过环境变量注入,Pydantic 加载器将此作为校验阻断铁律。 |
||
| 14 | 3. **CONF-03 依赖源连通性契约**:PyPI 强制锁定清华大学镜像源 `https://pypi.tuna.tsinghua.edu.cn/simple`;Dockerfile 基础镜像及构建阶段强拉内部私有镜像服务 `private-docker-repo:20706`。 |
||
| 15 | 4. **CONF-04 Pandas 依赖防御边界划定**:采用“环境容忍、代码绝对禁止”策略。允许 Pandas 作为第三方库隐式依赖存在于运行环境,但 CI 的 AST 脚本仅硬拦截扫描 `src/` 目录下的手写 `import pandas` 及其变体,不折腾依赖树排除机制。 |
||
| 16 | 5. **CONF-05 配置中心可序列化演进约束**:`config.py` 的 `Settings` 类必须提供专用的序列化接口(如 `dump_for_mlflow()`),在输出字典时自动剔除标记为敏感的字段,确保输出物可直接无缝对接 Step 5 的 `mlflow.log_params()`。 |
||
| 17 | 6. **CONF-06 规约拦截器配置化策略**:AST 拦截器(`lint_ast.py`)的“魔法数字黑名单”严禁硬编码,必须抽离为独立文本配置文件(如 `.magic_numbers.blacklist`),拦截器运行时动态读取,实现规约变更与拦截代码解耦。 |
||
| 18 | 7. **CONF-07 Sprint 1 工具类单测覆盖基线**:拒绝积压单测技术债。M1 阶段必须为 `config.py`(环境覆盖与剔除逻辑)和 `hash.py`(流式计算)编写真实运行的单测,CI 阶段由 `--collect-only` 升级为实际执行验证。 |
||
| 19 | 8. **CONF-08 双轨制 CI 软预警首次执行尺度**:从 Sprint 1 第一个 PR 起,严格执行“改 `src/` 必改 `docs/`”的软预警规则,初始化阶段不申请豁免,确立双轨制协作零妥协基线。 |
||
| 20 | |||
| 21 | --- |
||
| 22 | ## 二、 会议待办项 |
||
| 23 | |||
| 24 | | 编号 | 责任人 | 任务描述 | 截止时间 | 验收标准 | |
||
| 25 | | :--- | :--- | :--- | :--- | :--- | |
||
| 26 | | **TODO-01** | 基础架构 | CI/CD 资源隔离配置 | 本周三 | 完成 Gitea Action Runner Docker 执行环境的 `memory=50g` cgroup 硬限制,配置截图上传至 Redmine S1-04 任务附件。 | |
||
| 27 | | **TODO-02** | 数据资产/PM | 上游数据源 SLA 契约签署 | 本周五 | 输出《四核心字段稳定性承诺函》并推动上游团队完成签署。 | |
||
| 28 | | **TODO-03** | 研发工程师 | 上游核心字段强校验逻辑 | Sprint 1 交付 | 在 `data_loader.py` 入口对 `fund_id, fund_name, fund_type, create_date` 做存在性与类型强校验,缺失即抛异常阻断,写入单元测试覆盖。 | |
||
| 29 | |||
| 30 | --- |
||
| 31 | ## 三、 会议风险项 |
||
| 32 | |||
| 33 | | 编号 | 风险描述 | 应对策略/演进路线 | 跟踪机制 | |
||
| 34 | | :--- | :--- | :--- | :--- | |
||
| 35 | | **RISK-01** | 当前依赖清华公共 PyPI 源,存在供应链不可控及合规隐患。 | 短期可接受;长期企业级治理路线图必须纳入“自建内部 PyPI 服务(如 devpi)”评估。 | 作为架构治理储备项录入 Redmine 资产库,每季度 Review 一次基建规划。 | |
||
| 36 | |||
| 37 | --- |
||
| 38 | ## 四、 会议架构决策记录(ADR)产出要求 |
||
| 39 | |||
| 40 | 基于本次会议确认的 CONF-04 至 CONF-06,要求研发工程师在会后首个 PR 中,于 Gitea 仓库 `/docs/adr/` 目录下提交 `001-scaffolding-guardrails-decisions.md`,必须固化以下三点技术选型理由: |
||
| 41 | 1. 为何选择 AST 级 `src/` 扫描而非依赖树剥离来防御 Pandas。 |
||
| 42 | 2. 为何将魔法数字黑名单外置为配置文件。 |
||
| 43 | 3. 配置中心剥离敏感字段的序列化设计对 MLflow 追踪的复用价值。 |
||
| 44 | |||
| 45 | --- |
||
| 46 | ## 五、 Sprint 1 交付物全景清单(已对齐) |
||
| 47 | |||
| 48 | 以下为本次会议最终锁定需新增的文件及核心约束简述(供 Redmine 录入与 PR 检查点对齐): |
||
| 49 | | 分类 | 文件路径 | 核心约束简述 | |
||
| 50 | | :--- | :--- | :--- | |
||
| 51 | | **工程配置** | `pyproject.toml` | 声明核心依赖,**禁显式 pandas**,PyPI 源指向清华源。 | |
||
| 52 | | **工程配置** | `.pre-commit-config.yaml` | 引入 ruff 与本地 AST 拦截钩子。 | |
||
| 53 | | **工程配置** | `.gitea/workflows/ci.yml` | PR 触发,包含 AST Lint、src/docs 变更一致性软预警检查。 | |
||
| 54 | | **工程配置** | `Dockerfile` | 基于 Ubuntu 24,镜像源走 `private-docker-repo:20706`,非 root 用户运行。 | |
||
| 55 | | **业务参数** | `config/config.yaml` | 与规约 7.2 节 100% 吻合,零魔法数字。 | |
||
| 56 | | **规约拦截** | `scripts/lint_ast.py` | 扫描 `src/`,拦截 pandas 与 `.magic_numbers.blacklist` 中的数字。 | |
||
| 57 | | **规约拦截** | `.magic_numbers.blacklist` | 独立维护规约锁定数值(如 150, 0.20 等)。 | |
||
| 58 | | **核心源码** | `src/utils/config.py` | Pydantic 强类型单例,支持环境变量覆盖,实现 `dump_for_mlflow()` 自动脱敏。 | |
||
| 59 | | **核心源码** | `src/utils/logging.py` | JSON Handler,强制注入 `step`, `module` 等标准字段。 | |
||
| 60 | | **核心源码** | `src/utils/hash.py` | 流式读取计算 SHA-256,防 OOM。 | |
||
| 61 | | **质量保障** | `tests/test_config.py` | 覆盖环境变量覆盖与脱敏序列化逻辑。 | |
||
| 62 | | **质量保障** | `tests/test_hash.py` | 覆盖临时大文件流式计算正确性。 | |
||
| 63 | | **技术真相** | `docs/architecture_baseline.md` | 落地架构基线全文。 | |
||
| 64 | | **技术真相** | `docs/adr/001-scaffolding-guardrails-decisions.md` | 记录本次会议核心工程选型。 | |
||
| 65 | | **目录占位** | `data/*/.gitkeep` 等 | 保证空目录结构受 Git 版本控制。 | |
||
| 66 | --- |
||
| 67 | **会议闭环状态**:✅ 全部议程结束,无遗留阻塞项。研发团队可依据本纪要启动 Sprint 1 实施。 |