docs(prompt-mgmt): 方案A 协同回写 + 补声明 structlog 依赖

- memory/contracts.md:立 C6-ext(load_prompt/SPECS/SCHEMA_CATALOG/
  REVIEW_RESERVED_NAMES/SpecResolver + 打包契约)+ 变更日志一笔
- memory/decisions.md:方案A 决策(运行时值金标准/尾换行方案B/守卫前移/
  schema 留 Python/同一实例)
- memory/gotchas.md:spec.name 连字符命名 / 改稿须重生成金标准 /
  .gitattributes 完整嵌套路径 / wheel artifacts 带 .md / structlog 补声明 /
  SpecResolver 零 DB + 精确匹配
- PROGRESS.md:已封板「Prompt 管理重构 + 全量重写」波次
- ARCHITECTURE.md §5.1:补 prompt 外置 + SPECS/SCHEMA_CATALOG/SpecResolver,
  内置 agent 计数 8→21
- packages/{llm_gateway,core}/pyproject.toml:补声明 structlog>=24.1
  (原直接 import 未声明,靠 apps/api 传递;裸装 import ww_agents 会缺)
This commit is contained in:
Yaojia Wang
2026-06-24 08:25:26 +02:00
parent eb356c42a9
commit 0021426f09
8 changed files with 48 additions and 2 deletions

View File

@@ -87,3 +87,6 @@
- [2026-06-23] @backend 多章链网关C2**单档 `build_gateway_for_tier(tier)` 网关不能驱动跨档链**。 `chain_resolver`/`_resolver` 闭包恒返该 tier 的链、**忽略入参 `req.tier`**故拿它跑 review(analyst)/digest(light) 会全部错路由到 writer 档的 provider/model/任何跨档编排须用 `build_chain_gateway`union 三档适配器 + `chain_resolver` `req.tier` 分派)。测试用 mock 网关按 `req.output_schema` 路由 schema=write有=review不受此影响。
- [2026-06-23] @backend langgraph `CompiledStateGraph.ainvoke` mypy 重载`config` 必须是 `RunnableConfig``from langchain_core.runnables import RunnableConfig` `dict[str,dict[str,str]]` 不匹配任何重载 call-overload 返回值是 `dict[str,Any] | Any`传给取 `__interrupt__`/`written` helper 前先 `dict(raw_final)` 收敛为 `dict[str,Any]`interrupt 命中时返回值含 `__interrupt__`Interrupt 对象列表载荷读 `getattr(first,"value",first)`兼容 dict)。
- [2026-06-23] @backend `JobRepo` Protocol 加方法 `set_awaiting`= 契约变更**所有 fake 实现都要同步补**否则 mypy Protocol 缺成员本次漏了 `packages/core/tests/test_job_repo.py::FakeJobRepo` + `apps/api/tests/fakes_projects.py::FakeJobRepo`)。grep `class Fake.*JobRepo` 全仓再补
- [2026-06-24] @llm/@devops Prompt 外置`prompts/*.md` 文件名按 **spec.name连字符** Python 变量名——`style` agent name `"style"``style.md` `style_drift`另有 `character-gen.md`/`golden-finger.md`/`book-title.md`/`fine-outline.md`/`de-ai.md`。** prompt 内容后必须重生成金标准** `uv run python packages/agents/tests/_gen_golden.py`覆盖 `tests/fixtures/prompt_hashes.json`否则 `test_prompt_loader.py` 字节回归红旧常量含反斜杠折行——外迁/比对一律用**运行时值**别用源码文本`.gitattributes` `prompts/*.md text eol=lf`路径含斜杠是**根锚定**必须写完整嵌套路径 `packages/agents/ww_agents/prompts/*.md` 才匹配 `prompts/*.md` 不生效)。
- [2026-06-24] @devops wheel 默认不打非-`.py` 数据文件——`prompts/*.md` 必须在 `packages/agents/pyproject.toml` 显式纳入hatchling `artifacts`**别用 `force-include`**hatchling 已含包目录下全部文件force-include duplicate-path 构建失败源码树 pytest **测不出**漏带fail-fast 仅裸装时触发 CI `agents-wheel-smoke`build裸装`import ww_agents; assert ww_agents.SPECS``ww_agents` import 链拉起 `ww_llm_gateway``types.Tier`)→ `structlog` `packages/{llm_gateway,core}` 必须自声明 `structlog`原靠 apps/api 传递裸装 import ModuleNotFoundError)。
- [2026-06-24] @backend `SpecResolver`内置 name `SPECS` 纯内存、** DB**保留命名空间守卫在 **SkillRegistry 入库校验期** resolver 读路径用户 skill 与内置同名`REVIEW_RESERVED_NAMES set(SPECS)`)→ `AppError(VALIDATION)`name **精确字符串相等**拼错近似名`character_gen` vs `character-gen``output_schema_for` None/不命中是预期行为非 bug