build(repo): 落成工具链、依赖契约与十个模块的空骨架
第 ③ 阶段剩下的那半:架构文档之外,import-linter 契约也落地了。 pyproject.toml 把九条依赖规则里的七条写成五条 import-linter 契约。 分层用一条 layers 契约表达规则 1、2、3、8,`|` 表示同层互不 import; 另外四条 forbidden 分别管下游反向 import、polygateway 的唯一入口、 以及三个纯逻辑模块不碰 asyncio 与 pathlib。 契约不是平凡的绿:故意注入两处违规验证过,都被点名到行号。 先建十个模块的空包,是为了避开 PolyGateway bootstrap 期那段 Makefile 门控—— 它当时没有包,lint-imports 报 module not found 而红,只好加一段跳过逻辑。 空包让契约从第一天就真的在跑。 剩下两条规则落不进契约,写成了 tests/unit 下的测试: 规则 6「types 与 ports 不许 import 任何第三方」判据要反过来写(只许标准库和自己), 规则 9「import polyloop 之后 sys.modules 里没有 polygateway」是运行时事实。 另加硬约束 §1.1 零业务假设的黑名单扫描——它第一次跑就抓到 _assembly 的 docstring 里写了 dissect 的业务词,已改。三个扫描类测试都带 fail-closed 守卫, 防止目录搬走之后扫到空列表安静地绿。 工程约定取自实验室已有项目:setuptools + src layout、ruff 十一项 select、 line-length 100 来自 PolyGateway;dev 工具链版本钉死、--strict-markers 与 --import-mode=importlib 来自 CHSAnalyzer 与 dissect 踩过的坑,各自的理由写在配置注释里。 e2e 默认不跑,它打真实网关要花钱。 CLAUDE.md §0 那句「契约还没写,要等 src/ 落地」已过期,改掉; README 勾掉第 ②③ 阶段,补上本地检查命令与 GovDoc-Editor 那一行。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
| 这类事实 | 权威处 |
|
||||
|---|---|
|
||||
| **哪些事归本库管、哪些不归**,以及判据 | `research-wiki/explanation/scope.md` |
|
||||
| 分层、依赖方向、模块边界 | `research-wiki/explanation/architecture.md`,将由 `pyproject.toml` 的 import-linter 契约机器断言。**那些契约还没写**(要等 `src/` 落地才写得出来),在它们出现之前这份文档就是权威,没有机器兜底 |
|
||||
| 分层、依赖方向、模块边界 | `research-wiki/explanation/architecture.md`,由 `pyproject.toml` 的 import-linter 契约机器断言。九条依赖规则里有两条落不进契约(「不许 import 任何第三方」不是可枚举清单,「import 之后 `sys.modules` 里没有谁」是运行时事实),它们是 `tests/unit/` 里的测试 |
|
||||
| 公共 API 的行为契约:一次 `run` 到底保证什么、边界条件怎么结算 | `tests/contract/` 的公共契约套件。它同时是任何新适配器的准入标准 |
|
||||
| 公共类型的字段、不变量、枚举取值 | `src/polyloop/` 的代码与其测试。**不另写一份参考文档复述它们**——那份文档不重复代码的内容太少,而它腐烂的速度和代码一样快 |
|
||||
| 每个下游项目要迁走什么、迁完算不算数 | `research-wiki/migrations/` 下对应那份 |
|
||||
@@ -29,7 +29,7 @@
|
||||
| 文档体系怎么组织、新文档该放哪 | `research-wiki/README.md` |
|
||||
| 协作规则 | 本文件 |
|
||||
|
||||
**`reference/` 不在上表里,因为它不是任何东西的权威。** 那里的五个仓库和 `agent-core.md` 地位相同,都是参考资料。`agent-core.md` 是别人为本项目写的一份架构提案,它不是我们的设计,也不是常青文档——其中任何一条在被我们自己的 design doc 明确采纳之前都不作数。引用它时必须写成「agent-core.md 的说法是……」,不能写成「我们决定……」。代价是每次多写一句话,收益是不会长出「大家都以为这个决定已经做过了」的状态——那种状态在上表的裁决规则下最难修,因为它没有一个错的地方可以指。
|
||||
**`reference/` 不在上表里,因为它不是任何东西的权威。** 那里的六个仓库和 `agent-core.md` 地位相同,都是参考资料。`agent-core.md` 是别人为本项目写的一份架构提案,它不是我们的设计,也不是常青文档——其中任何一条在被我们自己的 design doc 明确采纳之前都不作数。引用它时必须写成「agent-core.md 的说法是……」,不能写成「我们决定……」。代价是每次多写一句话,收益是不会长出「大家都以为这个决定已经做过了」的状态——那种状态在上表的裁决规则下最难修,因为它没有一个错的地方可以指。
|
||||
|
||||
`reference/` 只读、不入库,也不改。
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
## 1. 硬约束
|
||||
|
||||
1. **零业务假设。** 库内禁止出现下游的业务词汇(公文、审核点、超声、CHS、benchmark、实验轮次、得分)与业务 fixtures;扩展点一律用 Protocol。三个下游的领域互不相交,一个业务词进来就等于替其中一个项目做了另外两个不需要的假设。这类假设很难删——它会长出配套的字段、分支和测试,删的时候要一起动。
|
||||
2. **不反向 import 任何下游项目。** 由 import-linter 契约断言(契约还没写,见 §0 第一行)。
|
||||
2. **不反向 import 任何下游项目。** 由 import-linter 契约断言。
|
||||
3. **公共类型的字段只增不删不改名,新增字段必带默认值。** 三个下游各自 `pip install` 本库,改名会让已经在跑的代码直接 `ImportError` 或静默拿到默认值。要删要改就发新 major 并写迁移指引。
|
||||
4. **持久化结构的 schema 变更走显式版本,不靠默认值补齐。** 会被下游存进数据库或实验数据集的结构(运行结果、逐步轨迹)必须带独立的 schema 版本,读到未知 major 直接失败。dissect 的轨迹是论文实验数据,一次静默的默认值填充会把「这件事没发生过」改写成「发生了但值为空」,而这种损坏要到统计阶段才暴露,那时已经分不清哪些行是真的。
|
||||
5. **模型调用一律走 PolyGateway**(实验室共用库)。不在本项目里另写重试 / 限流 / 熔断 / 缓存 / 遥测。缺能力就给 PolyGateway 提 PR。
|
||||
@@ -110,7 +110,7 @@ Codex 是 OpenAI 的编码模型,本仓库通过 `codex` 插件调用它。**
|
||||
只列需要解释的。`src/`、`tests/`、`.github/workflows/` 这类看名字就知道装什么的不列。
|
||||
|
||||
```
|
||||
★ reference/ 参考资料:五个仓库 + agent-core.md
|
||||
★ reference/ 参考资料:六个仓库 + agent-core.md
|
||||
只读、不改、不入库,且不是任何东西的权威(§0)
|
||||
★ research-wiki/README.md 文档体系怎么组织、新文档该放哪
|
||||
★ research-wiki/design/ 动工前的方案与权衡,只增不改;决策变更 = 新写一份标 supersedes
|
||||
@@ -122,7 +122,7 @@ Codex 是 OpenAI 的编码模型,本仓库通过 `codex` 插件调用它。**
|
||||
★ research-wiki/scratch/ 一次性草稿。进 git,但由人在每轮工作会话结束前清理(AI 不要自动删)
|
||||
★ tests/contract/ 公共 Protocol 的行为一致性套件,是那份契约的权威(§0),
|
||||
也是任何新适配器的准入标准。目录已建、测试还没写
|
||||
src/polyloop/ 库本体
|
||||
★ src/polyloop/ 库本体。十个模块的空骨架已建,内容还没写
|
||||
```
|
||||
|
||||
常青层与记录层的分界、各类的更新触发点、`scratch/` 那条人工清理规则的已知风险,都在 `research-wiki/README.md`。
|
||||
|
||||
Reference in New Issue
Block a user