feat(federation): member 配置正交化到 entity (specs/020) - #133
Merged
Conversation
Resolver(context=...) could override a DTO field's Paged default on the Core API path (γ federation :586 + local entity :1650), leaking runtime input into the Resolver. Pagination params are declarative/fixed on the field; runtime input belongs on the UseCase method signature, not Resolver context. - resolver.py: use paged_default directly at γ (:586) and local (:1650); delete _extract_page_params. _merge_paged stays (GraphQL entity-relation path uses it for client gql args). - Mode B (DTO) Paged is now fixed everywhere: use-case GraphQL never exposed limit/order on Paged fields, so clients could never override. - tests: drop 6 caller-override tests (test_dto_paged / test_paged_provider / test_dto_paged_remote). - demo/core_api + docs/advanced/federation (+zh): remove caller-override wording. 1517 passed (was 1523; -6 removed override tests), 87% coverage, zero regressions. Co-Authored-By: Claude <noreply@anthropic.com>
spec / plan / tasks / research / data-model / contracts / quickstart。 设计:member 侧联邦配置移到 entity(__federation_keys__ 纯标记 + __pagination_orders__ 统一不区分对内对外)+ γ join_key 归并 + AutoQueryConfig 退化为执行者。解决正交性 5 问题。breaking。 Co-Authored-By: Claude <noreply@anthropic.com>
- add_standard_queries 改读 entity.__federation_keys__ + __pagination_orders__ 生成 by_/page_ 根(有 order profile → page_by;无 → by_),替代 AutoQueryConfig.batch_keys/batch_pages - AutoQueryConfig.batch_* 标 removed(未真删,待 US1 收尾迁移) - tasks.md 顶部加「实现进度」段(新对话交接)⚠️ 工作进行中(未完成):7 个 federation 测试 + demo 未迁到 entity dunder, 当前测试会红。新对话接手见 tasks.md 进度段 + specs/020/。 Co-Authored-By: Claude <noreply@anthropic.com>
- 真删 AutoQueryConfig.batch_keys/batch_pages(参数+赋值),manager.py 错误消息 + registry.py docstring 同步去 batch_* - add_standard_queries 改「叠加」:federation key 总生成 by_<key>_in(FR-002), 有 order profile 额外生成 page_by_<key>_in(FR-003)。接手代码的「互斥」实现 违背 FR-002 + federation manager full_br(分页关系同时 wire by_/page_ 双 loader, manager.py:364),导致所有 pagination=True 联邦测试崩 - T006: registry._resolve_local_page_capability 加 federation key 路由判断 (profile key 在 __federation_keys__ → 归联邦根,不归本地 loader) - 18 个 federation/dto 测试 + page_config + reviews/users demo 迁到 entity dunder - 全量回归 1517 passed, 6 skipped(零回归) 剩余 US2(γ DTO __pagination_orders__ 收敛)/ US3(join key 归并)/ Polish。 Co-Authored-By: Claude <noreply@anthropic.com>
US2 (T007-T008): - γ DTO 不再自带 __pagination_orders__;add_dto_batch_roots 改读源 entity 的 __pagination_orders__[join_key](order 单一载体,β/γ 统一) - SubsetMeta 元类去掉 DTO 级 __pagination_orders__ 保留 - contracts「有→page_,无→by_」互斥措辞修正为叠加(FR-002+FR-003) US3 (T009-T011): - γ DTO join key 从源 entity __federation_keys__ 推导(单 key 自动; 多 key 用 SubsetConfig.federation_key 选择器,引用 entity 已声明的 key 名) - SubsetConfig.federation_join_key → federation_key(退化为选择器) - stamp __federation_join_key__ 保留为 entity 推导结果缓存(introspect/ standard_queries 读它不变 —— 最小改动,单一来源仍是 entity) 迁移:6 dto 测试 + reviews_app ReviewDTO(去 federation_join_key + __pagination_orders__)。全量回归 1517 passed, 6 skipped 零回归。 剩余 Polish:docs 迁移说明 + changelog breaking + SC-004 demo 端到端。 Co-Authored-By: Claude <noreply@anthropic.com>
- docs/advanced/federation.md + .zh.md: 代码示例改新声明模型(entity __federation_keys__ / __pagination_orders__ + γ DTO 派生),加「从 pre-020 迁移」表 - demo/federation/README.md: 更新声明说明(去 batch_keys/batch_pages/federation_join_key) - docs/changelog.md: Unreleased 段标 020 breaking(移除 batch_keys/batch_pages/ federation_join_key;AutoQueryConfig 退化为纯开关) - SC-004 验证: 三层联邦 demo(catalog→reviews→users)端到端跑通,β deep chain + γ composed_tree errors None,确认新声明模型工作 纯 docs,不计 semver(src 行为变更在 c523140/0470251)。发版由 release skill 处理。 Co-Authored-By: Claude <noreply@anthropic.com>
- subset.py: 删未用的 get_fk_fields import(US3 改 _validate 不再用) - query_executor.py / loader/__init__.py: import 排序(既有 I001,顺带修让 CI green) 1517 passed 零回归。 Co-Authored-By: Claude <noreply@anthropic.com>
排序是被排序对象的单一属性,与分桶维度(federation key)/关系归属正交: - __pagination_orders__ 从 dict[federation_key, cfg] 退化为单一 BatchPageConfig (entity 自己的排序)。add_standard_queries: 有 __pagination_orders__ → 每个 federation key 都出 page_by_<key>_in(共用这一个 profile),否则只 by_。 - 本地关系分页归 target entity: _resolve_local_page_capability 改读 target.__pagination_orders__(Comment 的排序,Review.comments 分页时用), 去掉 owner dict + T006 重名判断。Comment 被 N 个 owner 挂载时排序只配一次。 - add_dto_batch_roots / introspect γ 序列化读源 entity 单一 __pagination_orders__。 迁移: 所有 entity 声明 dict→单一;本地关系(Review.comments / Sprint.tasks / LOReview.comments 等)从 owner 迁到 target。docs 同步。 全量 1517 passed 零回归 + ruff src/ green。 Co-Authored-By: Claude <noreply@anthropic.com>
spec 是设计真相来源,补上 src 实现演进(spec 之前还停在 dict[key] + 统一路由): - spec.md: US2 重写(统一载体→排序归被排序对象,联邦读 owner/本地读 target); FR-003/4/5(entity 级 page_/by_ + 单一 + 归 target);Edge(去维度重名,本地读 target 不冲突);Key Entities(__pagination_orders__ 单一) - research.md: 决策 2/5 重写(统一路由→单一+target;per-key→entity 级) - data-model.md: __pagination_orders__ 形态 dict→单一;关系图(双 entity 各自) - contracts: 声明示例(Review 单一 + Comment 单一)+ 规则(归 target,去路由) - plan.md / quickstart.md: 概述/验证同步单一 纯 docs(spec-kit 产物),实现已在 9ca4bb1。 Co-Authored-By: Claude <noreply@anthropic.com>
- test_federation_pagination_transitive: A→B→C 穿透分页,B/C enable_pagination=False 仍正常(钉死 enable_pagination 与联邦分页正交)。对比实验(B→C pagination=False 崩溃)作为 021 动机证据。 - specs/021-federation-pagination-auto/spec.md: 议题存档 —— 去掉 RemoteRelationship.pagination(020 后冗余 + 不传递),mounter 自动 page_by_ 优先, 分页回归 ER diagram 级全局开关。 Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
Federation member 侧配置正交化:联邦能力全部声明在 entity 上(
__federation_keys__纯标记 +__pagination_orders__单一 order 载体),AutoQueryConfig退化为纯开关执行者,γ DTO 的 join key + order 从源 entity 推导。解决正交性 5 问题(join key member 侧 3 处重复 / order βγ 重复 /__pagination_orders__双重身份 / order 无单一载体 / 配置散落 4 处)。设计存档specs/020/。核心改动
__federation_keys__(联邦批量入口字段)+__pagination_orders__(order 单一载体,靠__federation_keys__路由联邦根 vs 本地关系)by_<key>_in,有 order profile 额外生成page_by_<key>_in(分页联邦关系同时 wire full + paged 双 loader)__pagination_orders__/federation_join_key,从源 entity 推导(单 key 自动;多 key 用SubsetConfig.federation_key选择器)registry._resolve_local_page_capability按 federation key 路由(联邦根 vs 本地 loader)AutoQueryConfig(batch_keys=...)entity.__federation_keys__AutoQueryConfig(batch_pages=...)entity.__pagination_orders__SubsetConfig(federation_join_key=...)__federation_keys__推导;多 key 用federation_key__pagination_orders____pagination_orders__[join_key]迁移说明见
docs/advanced/federation.md末尾对照表。测试
Commits
e0ce442fix(resolver): drop Core API context→Paged override(P6 修复,020 的前置基础)75689c7spec-kit 产物aae4109/c523140US1:add_standard_queries 读 entity dunder + by_/page_ 叠加 + T006 + 迁 18 测试0470251US2+US3:γ DTO order/join key 归并源 entity6dc579dPolish:docs 迁移说明 + changelog breaking + SC-004 验证🤖 Generated with Claude Code