pomaster 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/COMMERCIAL_LICENSE.md +35 -0
  2. package/LICENSE +83 -0
  3. package/README.md +396 -0
  4. package/SECURITY.md +22 -0
  5. package/TRADEMARKS.md +12 -0
  6. package/catalog/candidates/candidates-draft.json +198 -0
  7. package/catalog/candidates/rejected.json +422 -0
  8. package/catalog/catalog-lock.draft.json +822 -0
  9. package/catalog/gates/gate.be.api.contract_checks.json +138 -0
  10. package/catalog/gates/gate.be.chg.contract_change_checks.json +138 -0
  11. package/catalog/gates/gate.chg.prechange_checks.json +155 -0
  12. package/catalog/gates/gate.web.api.request_checks.json +149 -0
  13. package/catalog/gates/gate.web.grid.checks.json +149 -0
  14. package/catalog/knowledge/knowledge.api.example_stable_error_code.json +80 -0
  15. package/catalog/knowledge/knowledge.chg.example_compat_window.json +87 -0
  16. package/catalog/knowledge/knowledge.chg.example_prop_migration.json +87 -0
  17. package/catalog/knowledge/knowledge.fp.api.field_drift_no_contract.json +83 -0
  18. package/catalog/knowledge/knowledge.fp.api.per_page_http_client.json +83 -0
  19. package/catalog/knowledge/knowledge.fp.be.contract_drift.json +87 -0
  20. package/catalog/knowledge/knowledge.fp.chg.page_local_padding.json +88 -0
  21. package/catalog/knowledge/knowledge.fp.grid.global_td_width.json +87 -0
  22. package/catalog/knowledge/knowledge.web.api.example_get_entity_list.json +83 -0
  23. package/catalog/knowledge/knowledge.web.grid.example_column_preset.json +83 -0
  24. package/catalog/policies/authority.be.api_contract_ownership.json +77 -0
  25. package/catalog/policies/authority.be.contract_ownership.json +73 -0
  26. package/catalog/policies/authority.chg.change_owners.json +75 -0
  27. package/catalog/policies/authority.web.api.request_owners.json +82 -0
  28. package/catalog/policies/authority.web.grid.ownership.json +78 -0
  29. package/catalog/policies/policy.api.backward_compat_defaults.json +83 -0
  30. package/catalog/policies/policy.api.contract_impl_consistency.json +81 -0
  31. package/catalog/policies/policy.api.no_informal_contract.json +82 -0
  32. package/catalog/policies/policy.arch.decision_tradeoff_record.json +78 -0
  33. package/catalog/policies/policy.cache.lifecycle_definition.json +79 -0
  34. package/catalog/policies/policy.chg.affect_templates.json +79 -0
  35. package/catalog/policies/policy.chg.breaking_versioning.json +81 -0
  36. package/catalog/policies/policy.chg.compat_migration_rollback.json +82 -0
  37. package/catalog/policies/policy.chg.deprecate_before_delete.json +82 -0
  38. package/catalog/policies/policy.chg.fix_at_root_cause_level.json +78 -0
  39. package/catalog/policies/policy.chg.observable_evolution.json +78 -0
  40. package/catalog/policies/policy.chg.prechange_consumer_scan.json +83 -0
  41. package/catalog/policies/policy.chg.staged_rollout.json +79 -0
  42. package/catalog/policies/policy.chg.sync_contract_docs_tests.json +81 -0
  43. package/catalog/policies/policy.conflict.priority_ladder.json +79 -0
  44. package/catalog/policies/policy.dep.admission_six_dimension_check.json +84 -0
  45. package/catalog/policies/policy.dep.change_surface_review.json +82 -0
  46. package/catalog/policies/policy.dep.introduction_review.json +83 -0
  47. package/catalog/policies/policy.derived.single_implementation.json +77 -0
  48. package/catalog/policies/policy.obs.correlation_context_minimum.json +81 -0
  49. package/catalog/policies/policy.obs.rum_dimension_whitelist.json +77 -0
  50. package/catalog/policies/policy.proc.pre_code_declaration.json +78 -0
  51. package/catalog/policies/policy.rel.pre_release_confirmation.json +77 -0
  52. package/catalog/policies/policy.role.domain_decision_authority.json +77 -0
  53. package/catalog/policies/policy.sec.third_party_execution_register.json +78 -0
  54. package/catalog/policies/policy.spec.admission_criteria.json +79 -0
  55. package/catalog/policies/policy.spec.derived_view_regeneration.json +79 -0
  56. package/catalog/policies/policy.spec.draft_not_baseline.json +77 -0
  57. package/catalog/policies/policy.spec.file_structure_contract.json +76 -0
  58. package/catalog/policies/policy.spec.metadata_required.json +76 -0
  59. package/catalog/policies/policy.spec.post_dev_backfill_classify.json +74 -0
  60. package/catalog/policies/policy.spec.procedural_record_not_surrogate.json +76 -0
  61. package/catalog/policies/policy.spec.semantic_identity.json +77 -0
  62. package/catalog/policies/policy.spec.unresolved_ledger_gate.json +79 -0
  63. package/catalog/policies/policy.stack.no_implicit_selection.json +77 -0
  64. package/catalog/policies/policy.tool.scoped_scan_boundary.json +78 -0
  65. package/catalog/policies/policy.web.api.auth_app_client_split.json +93 -0
  66. package/catalog/policies/policy.web.api.client_change_impact.json +86 -0
  67. package/catalog/policies/policy.web.api.domain_api_only.json +84 -0
  68. package/catalog/policies/policy.web.api.error_normalization.json +82 -0
  69. package/catalog/policies/policy.web.api.generated_client.json +82 -0
  70. package/catalog/policies/policy.web.api.late_result_guard.json +80 -0
  71. package/catalog/policies/policy.web.api.mutation_idempotency.json +84 -0
  72. package/catalog/policies/policy.web.api.no_network_optimism.json +82 -0
  73. package/catalog/policies/policy.web.api.query_cancel_stale_drop.json +80 -0
  74. package/catalog/policies/policy.web.api.request_infrastructure.json +95 -0
  75. package/catalog/policies/policy.web.api.retry_discipline.json +87 -0
  76. package/catalog/policies/policy.web.api.session_recovery_split.json +94 -0
  77. package/catalog/policies/policy.web.api.single_http_client.json +88 -0
  78. package/catalog/policies/policy.web.api.single_loading_source.json +81 -0
  79. package/catalog/policies/policy.web.api.transport_vs_business.json +81 -0
  80. package/catalog/policies/policy.web.api.trusted_endpoint_source.json +82 -0
  81. package/catalog/policies/policy.web.api.typed_domain_naming.json +79 -0
  82. package/catalog/policies/policy.web.arch.layer_isolation.json +376 -0
  83. package/catalog/policies/policy.web.arch.naming_conventions.json +207 -0
  84. package/catalog/policies/policy.web.arch.public_api_barrel.json +134 -0
  85. package/catalog/policies/policy.web.chg.controlled_change_triggers.json +79 -0
  86. package/catalog/policies/policy.web.copy.suppression_ledger_discipline.json +78 -0
  87. package/catalog/policies/policy.web.grid.column_schema_fields.json +78 -0
  88. package/catalog/policies/policy.web.grid.config_isolation.json +78 -0
  89. package/catalog/policies/policy.web.grid.freeze_key_columns.json +77 -0
  90. package/catalog/policies/policy.web.grid.interaction_registry.json +80 -0
  91. package/catalog/policies/policy.web.grid.keyboard_clipboard.json +79 -0
  92. package/catalog/policies/policy.web.grid.schema_driven_shell.json +81 -0
  93. package/catalog/policies/policy.web.grid.schema_versioning.json +78 -0
  94. package/catalog/policies/policy.web.grid.server_ops_virtualization.json +81 -0
  95. package/catalog/policies/policy.web.grid.shell_change_matrix.json +76 -0
  96. package/catalog/policies/policy.web.grid.width_fix_ladder.json +79 -0
  97. package/catalog/policies/policy.web.perf.budget_skeleton.json +110 -0
  98. package/catalog/policies/policy.web.style.ownership_matrix.json +207 -0
  99. package/catalog/policies/policy.web.track.consent_lifecycle.json +78 -0
  100. package/catalog/policies/policy.web.track.privacy_default_deny.json +81 -0
  101. package/catalog/policies/policy.web.track.stable_event_keys.json +78 -0
  102. package/catalog/policies/policy.web.uiux.provider_evidence_not_business_truth.json +86 -0
  103. package/catalog/projection-presets/registry-tree.yaml +307 -0
  104. package/catalog/sensors/sensor.browser.deterministic.json +53 -0
  105. package/catalog/sensors/sensor.browser.interactive.json +58 -0
  106. package/catalog/sensors/sensor.build.static.json +45 -0
  107. package/catalog/sensors/sensor.contract.conformance.json +47 -0
  108. package/catalog/sensors/sensor.performance.budget.json +46 -0
  109. package/catalog/sensors/sensor.production.metric.json +44 -0
  110. package/catalog/tools/apply_human_review_pilot_0001.py +488 -0
  111. package/catalog/tools/materialize_batch4_uplift.py +776 -0
  112. package/catalog/tools/materialize_catalog_pilot.py +784 -0
  113. package/dist/bin.js +52362 -0
  114. package/legal/THIRD_PARTY_NOTICES.md +336 -0
  115. package/package.json +36 -0
@@ -0,0 +1,198 @@
1
+ [
2
+ {
3
+ "_record_type": "meta",
4
+ "package": "语义分解试点 · 协议甄选与语义提取(送审包)",
5
+ "date": "2026-08-28",
6
+ "status": "PROPOSAL",
7
+ "proposal_source": "design_seed",
8
+ "proposal_evidence": "PLANNED",
9
+ "human_review_required": true,
10
+ "discipline_compliance": [
11
+ "源料只读:仅读取 pomaster/components/{frontend,backend}-hard-spec/assets/universal 下协议 md;MASTer_master 未读未写",
12
+ "Semantic Decomposition 而非格式迁移:未改名/搬家任何 md;statement_zh 全部为独立改写(clean-room,零逐字拷贝)",
13
+ "未因文件名带 hard-spec 默认升 MUST:SHOULD/Example/Anti-pattern/Ownership 全部降级 advisory",
14
+ "全部卡片为 PROPOSAL(source=design_seed, evidence=PLANNED),Human Review 为内置下一步",
15
+ "词表纪律:未直接改 vocab-lock;词表缺口登记为 vocab-pr 候选(见 vocab_findings)"
16
+ ],
17
+ "selection": {
18
+ "basis": "D11 三主题(change governance / API contract / data grid)+ design-thread-B §3 甄选组合",
19
+ "protocols": [
20
+ {
21
+ "protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md",
22
+ "theme": "change governance",
23
+ "rationale": "tracer bullet #1 的宪法层:定义 Public Contract/Baseline/Controlled Change 全套变更治理原语,MUST 密度最高,且与 BE 08 同构度最高,是 cross-lane consolidation 的最小实验品"
24
+ },
25
+ {
26
+ "protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md",
27
+ "theme": "change governance(BE 对照)",
28
+ "rationale": "FE 06 的后端镜像:消费者识别/兼容窗口/迁移/回滚/版本策略与 FE 06 MUST-1/2 同构,破坏性变更版本化与 FE 06 Change Policy 同构;提供 3 组跨车道重复实证"
29
+ },
30
+ {
31
+ "protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md",
32
+ "theme": "API contract",
33
+ "rationale": "Contract Gate 的 FE 侧 policy 供给方:Domain API/HTTP Client 单点/传输 vs 业务成功分离/Retry-After/受控 endpoint 来源,均为 M4 contract gate 可消费的判卷规则"
34
+ },
35
+ {
36
+ "protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md",
37
+ "theme": "API contract(BE 对照)",
38
+ "rationale": "契约权威条款(正式契约=OpenAPI、禁止 Mock/聊天记录充当契约、契约-实现一致性)与 FE 15 构成跨车道契约链两侧,operationId 机器键可机判"
39
+ },
40
+ {
41
+ "protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md",
42
+ "theme": "data grid",
43
+ "rationale": "PRD §93.5 自己拿这份文件举例(virtualization policy 应拆 Catalog Policy + Project Baseline 两半);interaction-contract-registry 条款对应 po-master 已激活的 opt-in 门禁,拆解结果可立刻被 BATCH-1 gate 消费"
44
+ }
45
+ ],
46
+ "be_counterpart_gap": "data grid 主题在 backend-hard-spec/assets/universal 32 份协议中无对应物(grid 是前端 UI 层专有);最近邻 19-query-index-sql-protocol.md 属服务端查询层而非表格 UI 层,不构成对照,按要求注明"
47
+ },
48
+ "section_parser": {
49
+ "schema": "两 lane 协议共享九段结构:MUST / MUST NOT / SHOULD / Contract / Checklist / Examples / Anti-patterns / Ownership / Change Policy(另有 Scope/Non-Scope/Terms 作上下文,不产候选卡)",
50
+ "parsed": {
51
+ "FE 06-change-governance": {"MUST": 8, "MUST_NOT": "6 行(第 37/38 行逐字重复,5 条唯一)", "SHOULD": 2, "Contract": 1, "Checklist": "6 项", "Examples": 1, "Anti_patterns": 1, "Ownership": 1, "Change_Policy": 1},
52
+ "FE 15-request-api": {"MUST": 10, "MUST_NOT": 5, "SHOULD": 2, "Contract": 1, "Checklist": "5 项", "Examples": 1, "Anti_patterns": 1, "Ownership": 1, "Change_Policy": 1},
53
+ "FE 30-data-grid": {"MUST": 7, "MUST_NOT": 4, "SHOULD": 2, "Contract": 1, "Checklist": "5 项", "Examples": 1, "Anti_patterns": 1, "Ownership": 1, "Change_Policy": 1},
54
+ "BE 08-contract-change": {"frontmatter": "yaml(id/criticality/injection_mode/stages/triggers/requires)", "MUST": 1, "MUST_NOT": 1, "SHOULD": 1, "Contract": 1, "Checklist": "1 项", "Examples": 1, "Anti_patterns": 1, "Ownership": 1, "Change_Policy": 1},
55
+ "BE 12-api-contract": {"frontmatter": "yaml", "MUST": 1, "MUST_NOT": 1, "SHOULD": 1, "Contract": 1, "Checklist": "1 项", "Examples": 1, "Anti_patterns": 1, "Ownership": 1, "Change_Policy": 1}
56
+ }
57
+ },
58
+ "stats": {
59
+ "total_cards": 82,
60
+ "per_protocol": {"FE06": 22, "FE15": 23, "FE30": 19, "BE08": 9, "BE12": 9},
61
+ "classification_distribution": {
62
+ "UNIVERSAL_POLICY": 22,
63
+ "LANE_POLICY": 23,
64
+ "DUPLICATE": 17,
65
+ "CONTRACT_TEMPLATE": 5,
66
+ "GATE_RECIPE": 5,
67
+ "KNOWLEDGE_PATTERN": 5,
68
+ "FAILURE_PATTERN": 5,
69
+ "CONSTITUTION": 0,
70
+ "TECHNOLOGY_PROFILE": 0,
71
+ "PROJECT_BASELINE_TEMPLATE": 0,
72
+ "DEPRECATED": 0,
73
+ "REJECTED": 0
74
+ },
75
+ "duplicate_breakdown": "17 条 DUPLICATE = 1 条源内逐字重复(FE06 第 38 行)+ 11 条同协议内极性反转/语义被覆盖 + 5 条跨车道同构(BE 侧让位于 FE 正本,含 1 条 BE12 指针条款)",
76
+ "should_demoted_to_advisory": "8/8(FE06×2 + FE15×2 + FE30×2 + BE08×1 + BE12×1 全部降级 advisory)",
77
+ "advisory_total": 40,
78
+ "enforcement_distribution": {"required_when_applicable": 32, "advisory": 40, "deterministic_where_possible": 10},
79
+ "vocab_pr_needed_true": 50,
80
+ "cross_lane_consolidation_candidates": 4,
81
+ "b3_alignment": "本批 UNIVERSAL_POLICY 22 条(含 R-F 上提 2 条) + FAILURE_PATTERN 5 条即 Catalog v1『最小 MUST 集 + failure-pattern 附带』的原料池;其余 candidate 进 backlog 排队,不全量入册"
82
+ },
83
+ "vocab_findings": [
84
+ {"finding": "kind=policy 缺失于 kinds_registry.truth_bodies(POLICY. 前缀已冻结注册)", "proposal": "vocab-pr:登记 policy kind(或 Owner 裁决 policy 条目住 catalog/ 而非 truth/objects 正文层——两种落法需裁决)", "affected_cards": 45},
85
+ {"finding": "GATE. 前缀不在 prefixes_v0 15 前缀闭包内(closed-world,未知前缀解析即 FATAL)", "proposal": "vocab-pr:GATE_RECIPE 类候选若对象化需登记 GATE. 前缀(或 gate recipe 住 catalog/gate-recipes/ 非 truth 对象层)", "affected_cards": 5},
86
+ {"finding": "knowledge_entry kind 已存在于 truth_bodies——试点纪律所称『knowledge 无正式 kind』与 vocab-lock 实况不符", "proposal": "无需新 kind;FAILURE_PATTERN 可作为 knowledge_entry 的 payload 变体/kind profile 承载,提请 vocab PR 时一并确认,不新增枚举值", "affected_cards": 10},
87
+ {"finding": "AUTHORITY. 前缀已冻结注册;authority 属 control-plane 族(authority.json),无需 truth_bodies kind", "proposal": "无需 PR", "affected_cards": 5},
88
+ {"finding": "source=design_seed 在 source_types.allowed 集;evidence=PLANNED 在 evidence 轴", "proposal": "无需 PR", "affected_cards": 82}
89
+ ],
90
+ "human_review_application": {
91
+ "seq": "pilot-0001",
92
+ "date": "2026-08-28",
93
+ "authority": "Owner 授权:按机器建议分布全批(报告预填 ACCEPT 41 / ADJUST 24 / REJECT 17)+ 7 项管线级裁决照建议执行",
94
+ "applied": {
95
+ "ACCEPT": 42,
96
+ "ADJUST": 23,
97
+ "REJECT": 17
98
+ },
99
+ "note": "逐行实数 ACCEPT 42 / ADJUST 23 / REJECT 17 与报告预填统计(41/24/17)差 1:预填行自身归类与 §8 逐行表不一致(与 §3.1/§6.2 口径差 1 注记同类),落账以逐行表为准",
100
+ "pipeline_rulings": {
101
+ "R-A": "跨车道合并 M1–M4 全采纳:M1 六要素并入 PRECHANGE_CONSUMER_SCAN 单一 UNIVERSAL 正本(COMPAT_MIGRATION_ROLLBACK 互引);M2 BE 禁止形态并入 DEPRECATE_BEFORE_DELETE;M3 显式审批+可执行回退并入 BREAKING_VERSIONING;M4 CHG_RECORD/CHG_RECORD_BE 不硬合并,审阅为统一 CHANGE_RECORD 模板两 lane profile",
102
+ "R-B": "留 UNIVERSAL_POLICY:升 CONSTITUTION 诉求登记挂起(报告未给出升格建议,保守处置;待 vocab-pr V6 分类轴落地后 Owner 专项裁决)",
103
+ "R-C": "方案 b:5 条 CONTRACT_TEMPLATE 暂留 candidates-draft;gate.web.api.request_checks 检查项③悬空引用已改为内联字段清单;catalog/templates/ 落点挂起至 vocab-pr V8/GATE 前缀收编后",
104
+ "R-D": "转机器派生(T2 同批裁决):METADATA_REQUIRED 改为信封 authority/axes 结构性派生承载 + 机器预检字段存在性;GATE.CHG.PRECHANGE_CHECKS 检查项⑤同步改写",
105
+ "R-E": "授权改写:GLOBAL_TD_WIDTH / INTERACTION_REGISTRY notes 专名剥离;API_CONTRACT_OWNERSHIP notes 改写为通用边界模式",
106
+ "R-F": "部分采纳:TRANSPORT_VS_BUSINESS 与 NO_NETWORK_OPTIMISM 上提 UNIVERSAL_POLICY;RETRY_DISCIPLINE 维持 LANE(上提边界对照样本);AUTHORITY 5 条 M6 合并审登记留后续批次",
107
+ "R-G": "V1–V9 原则批准为 vocab-pr 草案段落,本批只登记不执行(FROZEN 词表未动)"
108
+ }
109
+ }
110
+ },
111
+
112
+ {"candidate_id": "POLICY.CHG.PRECHANGE_CONSUMER_SCAN", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第1条", "classification": "UNIVERSAL_POLICY", "statement_zh": "修改被多方依赖的公共能力前,必须先枚举直接与间接消费方及其受影响场景,形成影响面清单;契约/接口类变更还须同时明确兼容窗口、迁移方案、回滚路径与版本策略,与消费方影响面共同构成完整的前置扫描。", "statement_en_keywords": "pre-change impact scan, direct/indirect consumers, affected scenarios, public contract", "applies_when": {"lane": "any", "condition": "变更触及公共契约(公共组件/公共API/样式/状态/schema/平台能力)"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "pilot-0001 M1 合并执行:BE 08 PRECHANGE_SCAN_BE 六要素(消费方/兼容窗口/迁移/回滚/版本策略)已并入本正本,作为单一 UNIVERSAL 正本供两 lane 引用;兼容/迁移/回滚细则与 COMPAT_MIGRATION_ROLLBACK 互引", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L198(§8.1 #1)", "absorbed_duplicates": ["POLICY.CHG.NO_SINGLE_CONSUMER_API", "POLICY.CHG.PRECHANGE_SCAN_BE"]}},
113
+ {"candidate_id": "POLICY.CHG.COMPAT_MIGRATION_ROLLBACK", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第2条", "classification": "UNIVERSAL_POLICY", "statement_zh": "公共能力变更必须保持向后兼容,或同时给出迁移方案、受影响版本范围与回滚路径。", "statement_en_keywords": "backward compatibility, migration plan, version range, rollback path", "applies_when": {"lane": "any", "condition": "公共能力发生不兼容变更时"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "pilot-0001 M1 裁决执行:与正本 POLICY.CHG.PRECHANGE_CONSUMER_SCAN 保持互引(本条承载兼容窗口/迁移方案/回滚路径细则),不并条不删除(原注『跨车道合并候选:BE 08 MUST 同构』已执行完毕)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L199(§8.1 #2)", "absorbed_duplicates": ["POLICY.CHG.NO_SILENT_DEFAULT"]}},
114
+ {"candidate_id": "POLICY.CHG.SYNC_CONTRACT_DOCS_TESTS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第3条", "classification": "UNIVERSAL_POLICY", "statement_zh": "变更落地必须同步更新契约、示例、测试、文档并发出通知,禁止只改代码不动周边事实。", "statement_en_keywords": "artifact sync, contract, examples, tests, docs, notification", "applies_when": {"lane": "any", "condition": "任何公共变更落地"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "BE 08 反模式(只改实现不更新 OpenAPI/变更记录)即本条缺位的失败形态;pilot-0001 互引:GATE.BE.API.CONTRACT_CHECKS(同步清单两口径重叠约 60%,口径统一留 Owner 后续裁决,§3.4)、KNOWLEDGE.FP.BE.CONTRACT_DRIFT(M7 配对)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L200(§8.1 #3)"}},
115
+ {"candidate_id": "POLICY.CHG.DEPRECATE_BEFORE_DELETE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第4条", "classification": "UNIVERSAL_POLICY", "statement_zh": "公共能力删除前必须先进入 deprecated 状态,并确认已无使用方后方可移除;禁止形态:无迁移说明不得删除、重命名或改变已发布语义。", "statement_en_keywords": "deprecate before delete, zero-consumer confirmation, removal gate", "applies_when": {"lane": "any", "condition": "拟删除任何被依赖能力(props/事件/字段/状态/接口)"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "pilot-0001 M2 合并执行:BE 08 NO_DELETE_NO_MIGRATION_BE 禁止形态(无迁移说明不得删除/重命名/改变已发布语义)已并入本正本禁止形态段", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L201(§8.1 #4)", "absorbed_duplicates": ["POLICY.CHG.NO_DELETE_WITHOUT_MIGRATION", "POLICY.CHG.NO_DELETE_NO_MIGRATION_BE"]}},
116
+ {"candidate_id": "POLICY.CHG.FIX_AT_ROOT_CAUSE_LEVEL", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第5条", "classification": "UNIVERSAL_POLICY", "statement_zh": "缺陷修复必须按根因判定修改层级:属公共缺陷不得以局部补丁了结,属局部问题不得擅动公共层。", "statement_en_keywords": "root cause level selection, local vs public fix, fix-forget-repeat", "applies_when": {"lane": "any", "condition": "任何缺陷修复"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "与 R4 class_scan_result 纪律同源(修一处扫一类)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L202(§8.1 #5)", "absorbed_duplicates": ["POLICY.CHG.NO_LOCAL_MASK_FIX", "POLICY.CHG.NO_SINGLE_CONSUMER_API"]}},
117
+ {"candidate_id": "POLICY.SPEC.METADATA_REQUIRED", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第6条", "classification": "UNIVERSAL_POLICY", "statement_zh": "各级 spec(项目级/需求级/公共组件/接口)必须具备状态、版本、Owner、更新时间与生效范围元数据;vNext 信封形态下由 authority/axes 字段结构性派生承载,以机器预检字段存在性为准。", "statement_en_keywords": "spec metadata, status, version, owner, effective scope", "applies_when": {"lane": "any", "condition": "存在任何 spec 文档时"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "pilot-0001 R-D 裁决(T2 同批):转机器派生——元数据由信封 authority/axes 结构性派生承载,人工重复登记义务解除;联动 GATE.CHG.PRECHANGE_CHECKS 检查项⑤已改写为机器预检表述", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L203(§8.1 #6)"}},
118
+ {"candidate_id": "POLICY.WEB.CHG.CONTROLLED_CHANGE_TRIGGERS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第7条", "classification": "LANE_POLICY", "statement_zh": "Baseline 冻结后,凡触及公共组件 API、接口字段、权限码、错误码、Design Token、目录边界、状态模型、金额精度或验收门禁的修改,必须走 Controlled Change(附影响、Owner、迁移与验证证据)。", "statement_en_keywords": "controlled change, post-baseline freeze, trigger list, impact evidence", "applies_when": {"lane": "frontend", "condition": "Baseline 已冻结且修改命中触发清单"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "触发清单含 FE 专有对象(Design Token/权限码),故 LANE_POLICY;Controlled Change 概念本身可泛化", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L204(§8.1 #7)"}},
119
+ {"candidate_id": "POLICY.SPEC.POST_DEV_BACKFILL_CLASSIFY", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST 第8条", "classification": "UNIVERSAL_POLICY", "statement_zh": "每次开发结束的 Spec Update Review 必须把新规则显式归类为:需求级记录、长期 spec、通用规范候选或无需更新,不得留空。", "statement_en_keywords": "post-dev spec update review, rule classification, backfill", "applies_when": {"lane": "any", "condition": "每次开发任务收尾"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "『通用规范候选』出口即本试点管线(候选卡)的源头条款", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L205(§8.1 #8)"}},
120
+ {"candidate_id": "POLICY.CHG.NO_SILENT_DEFAULT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST NOT 第1条", "classification": "DUPLICATE", "statement_zh": "禁止静默改变公共默认行为。", "statement_en_keywords": "no silent default change", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:POLICY.CHG.COMPAT_MIGRATION_ROLLBACK 的禁止形态,语义被其覆盖;enforcement 由合并目标继承", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L206(§8.1 #9)", "reject_reason": "极性反转 DUPLICATE:并入正本禁止形态段(报告 §8.1 #9;§3.1 表)", "duplicate_of": "POLICY.CHG.COMPAT_MIGRATION_ROLLBACK"}},
121
+ {"candidate_id": "POLICY.CHG.NO_SINGLE_CONSUMER_API", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST NOT 第2条", "classification": "DUPLICATE", "statement_zh": "禁止为满足单页临时需求而修改公共 API。", "statement_en_keywords": "no public API change for single-page need", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:POLICY.CHG.PRECHANGE_CONSUMER_SCAN + FIX_AT_ROOT_CAUSE_LEVEL 联合覆盖", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L207(§8.1 #10)", "reject_reason": "极性反转 DUPLICATE:由正本与根因修复条款联合覆盖(报告 §8.1 #10;§3.1 表)", "duplicate_of": "POLICY.CHG.PRECHANGE_CONSUMER_SCAN", "duplicate_of_secondary": "POLICY.CHG.FIX_AT_ROOT_CAUSE_LEVEL"}},
122
+ {"candidate_id": "POLICY.CHG.NO_LOCAL_MASK_FIX", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST NOT 第3条", "classification": "DUPLICATE", "statement_zh": "禁止只修一个页面来掩盖公共问题。", "statement_en_keywords": "no local mask fix, page-level patch hiding public defect", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:POLICY.CHG.FIX_AT_ROOT_CAUSE_LEVEL 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L208(§8.1 #11)", "reject_reason": "极性反转 DUPLICATE:正本禁止形态(报告 §8.1 #11;§3.1 表)", "duplicate_of": "POLICY.CHG.FIX_AT_ROOT_CAUSE_LEVEL"}},
123
+ {"candidate_id": "POLICY.CHG.NO_DELETE_WITHOUT_MIGRATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST NOT 第4条", "classification": "DUPLICATE", "statement_zh": "禁止无迁移地删除 props、事件、字段或状态。", "statement_en_keywords": "no delete without migration", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:POLICY.CHG.DEPRECATE_BEFORE_DELETE 的 FE 具体形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L209(§8.1 #12)", "reject_reason": "极性反转 DUPLICATE:正本 FE 具体形态(报告 §8.1 #12;§3.1 表)", "duplicate_of": "POLICY.CHG.DEPRECATE_BEFORE_DELETE"}},
124
+ {"candidate_id": "POLICY.SPEC.DRAFT_NOT_BASELINE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST NOT 第5条", "classification": "UNIVERSAL_POLICY", "statement_zh": "Draft 或示例态内容不得当作 Baseline 执行;只有显式冻结的 Baseline 才可作为开发依据。", "statement_en_keywords": "draft not baseline, frozen-version discipline, epistemic fail-closed", "applies_when": {"lane": "any", "condition": "任何 spec 消费场景"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "带宪法级气质(认识论 fail-closed),保守留 UNIVERSAL_POLICY,是否升 CONSTITUTION 交 Human Review;pilot-0001 R-B 裁决:维持 UNIVERSAL_POLICY,升格诉求登记挂起(待 vocab-pr V6 十二分类轴落地后由 Owner 专项裁决)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L210(§8.1 #13)", "absorbed_duplicates": ["POLICY.SPEC.DRAFT_NOT_BASELINE_2"]}},
125
+ {"candidate_id": "POLICY.SPEC.DRAFT_NOT_BASELINE_2", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "MUST NOT 第6条", "classification": "DUPLICATE", "statement_zh": "与上一条逐字重复(源文件 37/38 行同文)。", "statement_en_keywords": "verbatim duplication in source", "applies_when": {"lane": "any", "condition": "不适用"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "源内逐字重复实证:合并至 POLICY.SPEC.DRAFT_NOT_BASELINE;源文件自身质量缺陷样本", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L211(§8.1 #14)", "reject_reason": "源内逐字重复实证(源协议 37/38 行同文)(报告 §8.1 #14;§3.1)", "duplicate_of": "POLICY.SPEC.DRAFT_NOT_BASELINE"}},
126
+ {"candidate_id": "POLICY.CHG.AFFECT_TEMPLATES", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "SHOULD 第1条", "classification": "UNIVERSAL_POLICY", "statement_zh": "建议使用影响评估模板、自动调用图与 deprecated 提示工具来降低变更治理的人力成本。", "statement_en_keywords": "impact template, auto call graph, deprecation hints, tooling", "applies_when": {"lane": "any", "condition": "公共变更评估"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L212(§8.1 #15)"}},
127
+ {"candidate_id": "POLICY.CHG.STAGED_ROLLOUT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "SHOULD 第2条", "classification": "UNIVERSAL_POLICY", "statement_zh": "公共变更建议拆为兼容引入、迁移、删除三阶段推进。", "statement_en_keywords": "staged rollout, compatible introduction, migration, removal phases", "applies_when": {"lane": "any", "condition": "破坏性公共变更"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory;pilot-0001 T1 precedence 声明:与 POLICY.CHG.BREAKING_VERSIONING 并读时紧急修复豁免优先(豁免前置流程但不豁免事后补齐),三阶段建议不溯及约束 hotfix", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L213(§8.1 #16)"}},
128
+ {"candidate_id": "POLICY.TPL.CHG_RECORD", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "Contract", "classification": "CONTRACT_TEMPLATE", "statement_zh": "变更记录对象的字段形状:Change、SpecStatus、Version、Owner、AffectedConsumers[]、Compatibility、Migration、DeprecationDate?、RemovalDate?、Tests、Rollback、SpecUpdateDecision。", "statement_en_keywords": "change record schema, affected consumers, migration, rollback, spec update decision", "applies_when": {"lane": "any", "condition": "记录任何公共变更时"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "pilot-0001 M4 裁决执行:与 POLICY.TPL.CHG_RECORD_BE 不硬合并,审阅为统一 CHANGE_RECORD 模板的两个 lane profile(FE profile 承载 SpecStatus/Rollback),互引登记;R-C=b:模板暂留 candidates-draft,catalog/templates/ 落点与 TEMPLATE. 前缀(V8)挂起至 vocab-pr/GATE 前缀收编后", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L214(§8.1 #17)"}},
129
+ {"candidate_id": "GATE.CHG.PRECHANGE_CHECKS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "Checklist(6 项)", "classification": "GATE_RECIPE", "statement_zh": "变更门禁检查单:①根因层级明确 ②调用方清单完整 ③兼容/迁移/回滚可执行 ④测试示例通知已更新 ⑤Spec 元数据已登记 ⑥开发后规则回填已归类。", "statement_en_keywords": "change gate checklist, root cause, consumer list, rollback, metadata, backfill", "applies_when": {"lane": "any", "condition": "公共变更过门禁"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "GATE. 前缀需 vocab PR(见 meta.vocab_findings);检查项④⑤可机判;pilot-0001 R-D 联动:检查项⑤已按 T2 处方改写为『机器预检元数据字段存在』(转机器派生)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L215(§8.1 #18)"}},
130
+ {"candidate_id": "KNOWLEDGE.CHG.EXAMPLE_PROP_MIGRATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "Examples", "classification": "KNOWLEDGE_PATTERN", "statement_zh": "示例:新增 props 时保留旧默认值并发布迁移说明,待调用方全部完成迁移后再删旧 props。", "statement_en_keywords": "example, additive prop migration, old default retention", "applies_when": {"lane": "frontend", "condition": "组件 props 演进"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "源文件自标『内容示例,可删除』;降级 advisory 知识;pilot-0001 M5:与 KNOWLEDGE.CHG.EXAMPLE_COMPAT_WINDOW(BE 08 同型)互引,合并为一条跨 lane 知识登记为候选,留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L216(§8.1 #19)"}},
131
+ {"candidate_id": "KNOWLEDGE.FP.CHG.PAGE_LOCAL_PADDING", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "Anti-patterns", "classification": "FAILURE_PATTERN", "statement_zh": "失败模式:为单个页面修改公共组件默认 padding,引发全站布局漂移且无视觉回归兜底。", "statement_en_keywords": "failure pattern, page-local override of public default, layout blast radius, no visual regression", "applies_when": {"lane": "frontend", "condition": "公共样式/默认值类变更"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "B3 五大家族 failure-pattern 附带池成员", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L217(§8.1 #20)"}},
132
+ {"candidate_id": "AUTHORITY.CHG.CHANGE_OWNERS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "Ownership", "classification": "UNIVERSAL_POLICY", "statement_zh": "权威分配默认值:公共能力 Owner 对兼容负责,调用方 Owner 对迁移负责,架构 Owner 裁决跨模块影响。", "statement_en_keywords": "ownership, public capability owner, consumer owner, architecture owner arbitration", "applies_when": {"lane": "any", "condition": "Authority Map 构建"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "落地为 Authority Map 条目(B7:registry 级粗起步);AUTHORITY. 前缀已冻结;pilot-0001 M6:与本批其余 4 条 AUTHORITY.* 结构同型(提供/消费/仲裁三层默认值),登记 Universal『领域分层所有权默认值』模板上提审阅(5→1+N),留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L218(§8.1 #21)"}},
133
+ {"candidate_id": "POLICY.CHG.BREAKING_VERSIONING", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/06-change-governance-protocol.md", "source_section": "Change Policy", "classification": "UNIVERSAL_POLICY", "statement_zh": "Breaking Change 必须版本化并经显式审批,且附可执行回退方案;紧急修复可豁免前置流程但不豁免事后补齐影响、通知与迁移记录。", "statement_en_keywords": "breaking change versioning, hotfix backfill obligation", "applies_when": {"lane": "any", "condition": "破坏性变更或紧急修复"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "跨车道合并候选:BE 08 Change Policy 同构(BE 侧多出显式审批+可执行回退子句,待并入)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L219(§8.1 #22)", "absorbed_duplicates": ["POLICY.CHG.BREAKING_VERSIONING_BE", "POLICY.API.DELEGATE_TO_CHG_PROTOCOL"]}},
134
+
135
+ {"candidate_id": "POLICY.WEB.API.DOMAIN_API_ONLY", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第1条", "classification": "LANE_POLICY", "statement_zh": "页面层只允许调用封装后的 Domain API 函数,不得接触传输细节。", "statement_en_keywords": "domain api only, page layer, no transport details", "applies_when": {"lane": "frontend", "condition": "页面发起任何后端请求"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L225(§8.2 #23)", "absorbed_duplicates": ["POLICY.WEB.API.NO_RAW_FETCH", "POLICY.WEB.API.NO_ENVELOPE_IN_COMPONENT"]}},
136
+ {"candidate_id": "POLICY.WEB.API.SINGLE_HTTP_CLIENT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第2条", "classification": "LANE_POLICY", "statement_zh": "base URL、认证、超时、取消、trace 与响应 envelope 必须由统一 HTTP Client 单点处理。", "statement_en_keywords": "single http client, base url, auth, timeout, cancellation, trace, envelope", "applies_when": {"lane": "frontend", "condition": "构建请求基础设施"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L226(§8.2 #24)", "absorbed_duplicates": ["POLICY.WEB.API.NO_RAW_FETCH", "POLICY.WEB.API.NO_LOGIC_DUPLICATION"]}},
137
+ {"candidate_id": "POLICY.WEB.API.TYPED_DOMAIN_NAMING", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第3条", "classification": "LANE_POLICY", "statement_zh": "请求函数必须带类型并使用稳定的领域动词命名。", "statement_en_keywords": "typed request functions, stable domain verb naming", "applies_when": {"lane": "frontend", "condition": "定义任何请求函数"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L227(§8.2 #25)"}},
138
+ {"candidate_id": "POLICY.WEB.API.QUERY_CANCEL_STALE_DROP", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第4条", "classification": "LANE_POLICY", "statement_zh": "查询请求必须可取消并丢弃过期响应,保证结果与时序一致。", "statement_en_keywords": "cancellable queries, stale response drop, race safety", "applies_when": {"lane": "frontend", "condition": "查询类请求"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L228(§8.2 #26)"}},
139
+ {"candidate_id": "POLICY.WEB.API.MUTATION_IDEMPOTENCY", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第5条", "classification": "LANE_POLICY", "statement_zh": "每个 mutation 必须显式声明幂等性与重试边界。", "statement_en_keywords": "mutation idempotency, retry boundary declaration", "applies_when": {"lane": "frontend", "condition": "mutation 类请求"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "与 BE 22-idempotency-protocol 形成跨车道语义对(本轮未选其对照,登记待后续批次)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L229(§8.2 #27)", "absorbed_duplicates": ["POLICY.WEB.API.NO_AUTO_RETRY_NONIDEM"]}},
140
+ {"candidate_id": "POLICY.WEB.API.ERROR_NORMALIZATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第6条", "classification": "LANE_POLICY", "statement_zh": "各请求错误必须转换为统一错误结构后再上抛。", "statement_en_keywords": "error normalization, unified error structure", "applies_when": {"lane": "frontend", "condition": "任何请求错误路径"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L230(§8.2 #28)", "absorbed_duplicates": ["POLICY.WEB.API.NO_ENVELOPE_IN_COMPONENT"]}},
141
+ {"candidate_id": "POLICY.WEB.API.TRANSPORT_VS_BUSINESS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第7条", "classification": "UNIVERSAL_POLICY", "statement_zh": "传输成功与业务成功必须分别判定;HTTP 非成功状态、契约解析失败、取消、超时、离线与业务错误不得混为同一类。", "statement_en_keywords": "transport vs business success, error taxonomy separation", "applies_when": {"lane": "frontend", "condition": "请求结果判定"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "语义上跨车道通用(任何 client 侧);pilot-0001 R-F:已上提 UNIVERSAL_POLICY(判据:语句实体——传输/业务成功判定——可跨 lane 存在;applies_when.lane 维持不动,待 V7 lane 轴登记后再议)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L231(§8.2 #29)"}},
142
+ {"candidate_id": "POLICY.WEB.API.RETRY_DISCIPLINE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第8条", "classification": "LANE_POLICY", "statement_zh": "重试必须服从幂等性约束、服务端 Retry-After 或受控退避且可取消;被取消/被替代的请求不得提示为用户错误。", "statement_en_keywords": "retry discipline, idempotency, Retry-After, controlled backoff, cancellation UX", "applies_when": {"lane": "frontend", "condition": "任何自动重试机制"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "pilot-0001 R-F 对照样本:维持 LANE_POLICY——含 HTTP 专有词元 Retry-After,上提会失真;作为上提判据(语句实体是否可跨 lane 存在)的反例保留", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L232(§8.2 #30)", "absorbed_duplicates": ["POLICY.WEB.API.NO_AUTO_RETRY_NONIDEM"]}},
143
+ {"candidate_id": "POLICY.WEB.API.LATE_RESULT_GUARD", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第9条", "classification": "LANE_POLICY", "statement_zh": "请求结果提交前必须复核身份、租户、权限、参数与请求版本,阻止旧上下文的过期结果写回。", "statement_en_keywords": "late result guard, context version, stale write prevention", "applies_when": {"lane": "frontend", "condition": "请求结果提交至应用状态"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L233(§8.2 #31)"}},
144
+ {"candidate_id": "POLICY.WEB.API.TRUSTED_ENDPOINT_SOURCE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST 第10条", "classification": "LANE_POLICY", "statement_zh": "endpoint、redirect 与 base URL 只能来自受控配置或正式契约,禁止由不可信 URL 参数直接拼接。", "statement_en_keywords": "trusted endpoint sources, no untrusted URL concatenation, SSRF-adjacent", "applies_when": {"lane": "frontend", "condition": "构造任何请求地址"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "安全相关;与 BE 12『正式契约=OpenAPI 权威』构成跨车道契约链;pilot-0001 互引:POLICY.API.NO_INFORMAL_CONTRACT", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L234(§8.2 #32)"}},
145
+ {"candidate_id": "POLICY.WEB.API.NO_RAW_FETCH", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST NOT 第1条", "classification": "DUPLICATE", "statement_zh": "禁止在页面直接写 fetch/axios 或手工拼 endpoint。", "statement_en_keywords": "no raw fetch/axios in pages", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:DOMAIN_API_ONLY + SINGLE_HTTP_CLIENT 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L235(§8.2 #33)", "reject_reason": "极性反转 DUPLICATE:两正本联合覆盖(报告 §8.2 #33;§3.1 表)", "duplicate_of": "POLICY.WEB.API.DOMAIN_API_ONLY", "duplicate_of_secondary": "POLICY.WEB.API.SINGLE_HTTP_CLIENT"}},
146
+ {"candidate_id": "POLICY.WEB.API.NO_LOGIC_DUPLICATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST NOT 第2条", "classification": "DUPLICATE", "statement_zh": "禁止多模块重复 token、错误码与重试逻辑。", "statement_en_keywords": "no duplicated token/error/retry logic", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:SINGLE_HTTP_CLIENT 单点统一的症候表述", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L236(§8.2 #34)", "reject_reason": "极性反转 DUPLICATE:单点统一的症候表述(报告 §8.2 #34;§3.1 表)", "duplicate_of": "POLICY.WEB.API.SINGLE_HTTP_CLIENT"}},
147
+ {"candidate_id": "POLICY.WEB.API.NO_AUTO_RETRY_NONIDEM", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST NOT 第3条", "classification": "DUPLICATE", "statement_zh": "禁止对非幂等 mutation 默认自动重试。", "statement_en_keywords": "no auto retry on non-idempotent mutation", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:RETRY_DISCIPLINE + MUTATION_IDEMPOTENCY 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L237(§8.2 #35)", "reject_reason": "极性反转 DUPLICATE:与幂等条款并读,合并后消除 T4 表面冲突(报告 §8.2 #35;§3.1 表)", "duplicate_of": "POLICY.WEB.API.RETRY_DISCIPLINE", "duplicate_of_secondary": "POLICY.WEB.API.MUTATION_IDEMPOTENCY"}},
148
+ {"candidate_id": "POLICY.WEB.API.NO_ENVELOPE_IN_COMPONENT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST NOT 第4条", "classification": "DUPLICATE", "statement_zh": "禁止组件层解析原始响应 envelope。", "statement_en_keywords": "no envelope parsing in components, layering", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:DOMAIN_API_ONLY + ERROR_NORMALIZATION 的越层禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L238(§8.2 #36)", "reject_reason": "极性反转 DUPLICATE:越层禁止形态(报告 §8.2 #36;§3.1 表)", "duplicate_of": "POLICY.WEB.API.DOMAIN_API_ONLY", "duplicate_of_secondary": "POLICY.WEB.API.ERROR_NORMALIZATION"}},
149
+ {"candidate_id": "POLICY.WEB.API.NO_NETWORK_OPTIMISM", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "MUST NOT 第5条", "classification": "UNIVERSAL_POLICY", "statement_zh": "不得把『网络在线』当作请求成功的证明,也不得假设 HTTP 404/500 必然以 Promise rejection 表现;传输层假设必须显式声明。", "statement_en_keywords": "no network optimism, online != success, hidden transport assumptions", "applies_when": {"lane": "frontend", "condition": "请求结果判定与用户提示"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "独有内容(破除隐含假设),非既有条款极性反转;pilot-0001 R-F:已上提 UNIVERSAL_POLICY(lane 中性:『在线即成功』假设破除在任何 client 侧成立)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L239(§8.2 #37)"}},
150
+ {"candidate_id": "POLICY.WEB.API.GENERATED_CLIENT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "SHOULD 第1条", "classification": "LANE_POLICY", "statement_zh": "建议以生成客户端或 typed adapter 对接正式契约,避免手写类型漂移。", "statement_en_keywords": "generated client, typed adapter, contract-first", "applies_when": {"lane": "frontend", "condition": "正式契约已发布"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory;与 BE 12 契约权威条款跨车道呼应", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L240(§8.2 #38)"}},
151
+ {"candidate_id": "POLICY.WEB.API.SINGLE_LOADING_SOURCE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "SHOULD 第2条", "classification": "LANE_POLICY", "statement_zh": "loading 状态来源应唯一,避免多处布尔重复。", "statement_en_keywords": "single loading source, no duplicated boolean state", "applies_when": {"lane": "frontend", "condition": "页面加载态管理"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L241(§8.2 #39)"}},
152
+ {"candidate_id": "POLICY.TPL.API_FUNCTION_CONTRACT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "Contract", "classification": "CONTRACT_TEMPLATE", "statement_zh": "请求函数契约形状:FunctionName、InputType、OutputType、ErrorType、StatusPolicy、Cancellation、Retry、RetryAfter、Idempotency、ContextVersion、LateResultGuard、Trace。", "statement_en_keywords": "request function contract shape, status policy, cancellation, retry, trace", "applies_when": {"lane": "frontend", "condition": "定义 Domain API 函数"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "pilot-0001 R-C=b:暂留 candidates-draft;GATE.WEB.API.REQUEST_CHECKS 检查项③原引用本模板的悬空引用已改为内联字段清单(StatusPolicy/Cancellation/Retry/RetryAfter/Idempotency);TEMPLATE. 前缀(V8)挂起 vocab-pr", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L242(§8.2 #40)"}},
153
+ {"candidate_id": "GATE.WEB.API.REQUEST_CHECKS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "Checklist(5 项)", "classification": "GATE_RECIPE", "statement_zh": "请求层门禁检查单:①页面仅用 Domain API ②类型与错误统一 ③取消/重试/幂等明确 ④无重复 loading/认证逻辑 ⑤状态判定、旧结果防护与 endpoint 来源明确。", "statement_en_keywords": "request layer gate checklist", "applies_when": {"lane": "frontend", "condition": "请求层过门禁"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "GATE. 前缀需 vocab PR;pilot-0001 R-C=b 联动:检查项③原『见 POLICY.TPL.API_FUNCTION_CONTRACT 模板』悬空引用已改为内联字段清单", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L243(§8.2 #41)"}},
154
+ {"candidate_id": "KNOWLEDGE.WEB.API.EXAMPLE_GET_ENTITY_LIST", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "Examples", "classification": "KNOWLEDGE_PATTERN", "statement_zh": "示例:getEntityList(query, signal) 返回稳定分页模型,调用方不感知 endpoint 与 envelope。", "statement_en_keywords": "example, paginated model, transport opacity", "applies_when": {"lane": "frontend", "condition": "查询函数设计"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "源文件自标『内容示例,可删除』", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L244(§8.2 #42)"}},
155
+ {"candidate_id": "KNOWLEDGE.FP.API.PER_PAGE_HTTP_CLIENT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "Anti-patterns", "classification": "FAILURE_PATTERN", "statement_zh": "失败模式:每个页面各自创建请求实例、各自刷新 token,并靠字符串比较错误 message 判错。", "statement_en_keywords": "failure pattern, per-page http client, string-matching error handling", "applies_when": {"lane": "frontend", "condition": "请求层架构评审"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "B3 failure-pattern 附带池成员", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L245(§8.2 #43)"}},
156
+ {"candidate_id": "AUTHORITY.WEB.API.REQUEST_OWNERS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "Ownership", "classification": "UNIVERSAL_POLICY", "statement_zh": "权威分配默认值:平台 Owner 维护 HTTP Client,领域 Owner 维护 Domain API,契约 Owner 维护类型来源。", "statement_en_keywords": "platform owner, domain owner, contract owner", "applies_when": {"lane": "frontend", "condition": "Authority Map 构建"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "AUTHORITY. 前缀已冻结;control-plane 落地;pilot-0001 M6:同型上提审阅登记(见 AUTHORITY.CHG.CHANGE_OWNERS),留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L246(§8.2 #44)"}},
157
+ {"candidate_id": "POLICY.WEB.API.CLIENT_CHANGE_IMPACT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/15-request-api-protocol.md", "source_section": "Change Policy", "classification": "LANE_POLICY", "statement_zh": "客户端公共行为变更必须评估全部请求方;函数破坏性变化须提供迁移路径与弃用期。", "statement_en_keywords": "client change impact assessment, migration, deprecation window", "applies_when": {"lane": "frontend", "condition": "HTTP Client/Domain API 公共行为变更"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "引用 POLICY.CHG.* 族而非自建流程;pilot-0001 ADJUST:M1 合并出单一 UNIVERSAL 正本后,本条登记为指针条款候选(避免与 CHG 族双写),留后续批次改写", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L247(§8.2 #45)"}},
158
+
159
+ {"candidate_id": "POLICY.WEB.GRID.SCHEMA_DRIVEN_SHELL", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第1条", "classification": "LANE_POLICY", "statement_zh": "表格必须经统一表格壳 + typed Column Schema 渲染,禁止页面自绘表格骨架。", "statement_en_keywords": "unified grid shell, typed column schema, schema-driven rendering", "applies_when": {"lane": "frontend", "condition": "页面渲染任何数据表格"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "对应 CAPABILITY.GRID.* 能力族(GRID.* alias 收编)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L253(§8.3 #46)", "absorbed_duplicates": ["POLICY.WEB.GRID.NO_TEMPLATE_COLUMNS"]}},
160
+ {"candidate_id": "POLICY.WEB.GRID.COLUMN_SCHEMA_FIELDS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第2条", "classification": "LANE_POLICY", "statement_zh": "每列必须具备稳定 key、标题、值类型、宽度策略、权限与导出规则六项 schema 字段。", "statement_en_keywords": "column schema fields, stable key, width policy, permission, export rule", "applies_when": {"lane": "frontend", "condition": "定义任何表格列"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L254(§8.3 #47)"}},
161
+ {"candidate_id": "POLICY.WEB.GRID.SERVER_OPS_VIRTUALIZATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第3条", "classification": "LANE_POLICY", "statement_zh": "大数据量表必须采用服务端分页/筛选/排序并启用虚拟化渲染;『大数据量』阈值参数由 Project Baseline 供给,Catalog 正本不内置默认阈值。", "statement_en_keywords": "server-side pagination/filter/sort, virtualization, large datasets", "applies_when": {"lane": "frontend", "condition": "数据量超过项目基线阈值的表格"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "PRD §93.5 自举例:本条应拆两半——Catalog Policy(大数据→服务端操作+虚拟化)+ Project Baseline(阈值与适用表格清单);『大数据』判据属项目基线;pilot-0001 ADJUST:正本已显式声明阈值由 Project Baseline 供给(§93.5 拆两半)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L255(§8.3 #48)", "absorbed_duplicates": ["POLICY.WEB.GRID.NO_FAKE_PAGINATION"]}},
162
+ {"candidate_id": "POLICY.WEB.GRID.CONFIG_ISOLATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第4条", "classification": "LANE_POLICY", "statement_zh": "列配置必须按页面、表格、用户与 schema 版本四维隔离存储。", "statement_en_keywords": "column config isolation, per page/grid/user/schema-version", "applies_when": {"lane": "frontend", "condition": "表格配置可保存时"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L256(§8.3 #49)", "absorbed_duplicates": ["POLICY.WEB.GRID.NO_SHARED_CONFIG_KEYS"]}},
163
+ {"candidate_id": "POLICY.WEB.GRID.WIDTH_FIX_LADDER", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第5条", "classification": "LANE_POLICY", "statement_zh": "列宽修复必须先判定影响层级:单页例外→同类型 preset→领域 preset→表格壳→全局 token,逐级上浮选择。", "statement_en_keywords": "column width fix ladder, impact level selection, preset hierarchy", "applies_when": {"lane": "frontend", "condition": "修复列宽类问题"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L257(§8.3 #50)", "absorbed_duplicates": ["POLICY.WEB.GRID.NO_GLOBAL_WIDTH_CSS"]}},
164
+ {"candidate_id": "POLICY.WEB.GRID.SHELL_CHANGE_MATRIX", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第6条", "classification": "LANE_POLICY", "statement_zh": "公共表格壳变更必须回归验证全部 Grid Type(可编辑宽表/只读表/报表/主数据表)。", "statement_en_keywords": "shell change, full grid type matrix, regression", "applies_when": {"lane": "frontend", "condition": "公共表格壳变更"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L258(§8.3 #51)"}},
165
+ {"candidate_id": "POLICY.WEB.GRID.INTERACTION_REGISTRY", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST 第7条", "classification": "LANE_POLICY", "statement_zh": "表格交互(行 click/dblclick/select/drag-select/列头排序/单元格 focus 等)必须逐项登记于 interaction-contract-registry 并绑定 action_id 与 api_requirement_ids;所支持交互子集必须显式界定并说明触发后果;排斥键盘的交互必须声明键盘等价路径。", "statement_en_keywords": "interaction contract registry, action binding, api requirement binding, keyboard equivalence, explicit interaction subset", "applies_when": {"lane": "frontend", "condition": "页面含 data grid 且项目启用 interaction-contract-registry(opt-in:registry 文件存在)"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "opt-in 语义保留:registry 文件不存在时 gate 应报 not-configured 而非静默通过(四态语义,T3——升 MUST 时不得剥离该条件);pilot-0001 R-E:po-master 决议编号引用已剥离,不入 global 正本", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L259(§8.3 #52)"}},
166
+ {"candidate_id": "POLICY.WEB.GRID.NO_TEMPLATE_COLUMNS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST NOT 第1条", "classification": "DUPLICATE", "statement_zh": "禁止 template 手写列或跨页面复制列数组。", "statement_en_keywords": "no template columns, no copied column arrays", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:SCHEMA_DRIVEN_SHELL 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L260(§8.3 #53)", "reject_reason": "极性反转 DUPLICATE:正本禁止形态(报告 §8.3 #53;§3.1 表)", "duplicate_of": "POLICY.WEB.GRID.SCHEMA_DRIVEN_SHELL"}},
167
+ {"candidate_id": "POLICY.WEB.GRID.NO_GLOBAL_WIDTH_CSS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST NOT 第2条", "classification": "DUPLICATE", "statement_zh": "禁止为单页列宽修改全局 CSS。", "statement_en_keywords": "no global css for single-page width", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:WIDTH_FIX_LADDER 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L261(§8.3 #54)", "reject_reason": "极性反转 DUPLICATE:正本禁止形态(报告 §8.3 #54;§3.1 表)", "duplicate_of": "POLICY.WEB.GRID.WIDTH_FIX_LADDER"}},
168
+ {"candidate_id": "POLICY.WEB.GRID.NO_SHARED_CONFIG_KEYS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST NOT 第3条", "classification": "DUPLICATE", "statement_zh": "禁止不同类型表格共享污染性配置 key。", "statement_en_keywords": "no polluted shared config keys across grid types", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:CONFIG_ISOLATION 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L262(§8.3 #55)", "reject_reason": "极性反转 DUPLICATE:正本禁止形态(报告 §8.3 #55;§3.1 表)", "duplicate_of": "POLICY.WEB.GRID.CONFIG_ISOLATION"}},
169
+ {"candidate_id": "POLICY.WEB.GRID.NO_FAKE_PAGINATION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "MUST NOT 第4条", "classification": "DUPLICATE", "statement_zh": "禁止前端加载全量数据做假分页。", "statement_en_keywords": "no fake pagination, no full data load", "applies_when": {"lane": "frontend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "合并指针:SERVER_OPS_VIRTUALIZATION 的禁止形态", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L263(§8.3 #56)", "reject_reason": "极性反转 DUPLICATE:正本禁止形态(报告 §8.3 #56;§3.1 表)", "duplicate_of": "POLICY.WEB.GRID.SERVER_OPS_VIRTUALIZATION"}},
170
+ {"candidate_id": "POLICY.WEB.GRID.FREEZE_KEY_COLUMNS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "SHOULD 第1条", "classification": "LANE_POLICY", "statement_zh": "建议固定关键标识列与操作列并限制冻结总宽。", "statement_en_keywords": "frozen key/action columns, freeze width budget", "applies_when": {"lane": "frontend", "condition": "宽表列较多时"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L264(§8.3 #57)"}},
171
+ {"candidate_id": "POLICY.WEB.GRID.KEYBOARD_CLIPBOARD", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "SHOULD 第2条", "classification": "LANE_POLICY", "statement_zh": "键盘操作、复制粘贴、冲突处理与保存视图应有明确契约。", "statement_en_keywords": "keyboard, copy-paste, conflict handling, saved view contract", "applies_when": {"lane": "frontend", "condition": "可编辑表格"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory;键盘等价路径部分已被 MUST-7(INTERACTION_REGISTRY)升格为 required", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L265(§8.3 #58)"}},
172
+ {"candidate_id": "POLICY.TPL.GRID_CONTRACT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "Contract", "classification": "CONTRACT_TEMPLATE", "statement_zh": "表格对象契约形状:GridType、RowKey、ColumnSchema[]、ServerOperations、Virtualization、SavedViewKey、ExportScope、Permissions、InteractionContracts[]。", "statement_en_keywords": "grid contract shape, row key, server operations, saved view, interaction contracts", "applies_when": {"lane": "frontend", "condition": "登记 GRID.* capability 对象"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "与 M4 GRID.* capability 对象生成直接对接;pilot-0001 R-C=b:暂留 candidates-draft,落点挂起至 vocab-pr V8/GATE 前缀收编后", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L266(§8.3 #59)"}},
173
+ {"candidate_id": "GATE.WEB.GRID.CHECKS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "Checklist(5 项)", "classification": "GATE_RECIPE", "statement_zh": "表格门禁检查单:①schema 驱动 ②列宽影响层级正确 ③大数据与配置隔离安全 ④导出与当前视图一致 ⑤每个支持交互已在 registry 声明并绑定 action+API。", "statement_en_keywords": "grid gate checklist, schema-driven, config isolation, export consistency, interaction registry", "applies_when": {"lane": "frontend", "condition": "表格相关变更过门禁"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "GATE. 前缀需 vocab PR;⑤依赖 interaction-contract-registry 存在(opt-in→not-configured 语义)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L267(§8.3 #60)"}},
174
+ {"candidate_id": "KNOWLEDGE.WEB.GRID.EXAMPLE_COLUMN_PRESET", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "Examples", "classification": "KNOWLEDGE_PATTERN", "statement_zh": "示例:同类型报表共享 column preset;单页例外写入 page contract 而非改可编辑宽表。", "statement_en_keywords": "example, shared column preset, page contract exception", "applies_when": {"lane": "frontend", "condition": "报表类表格设计"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "源文件自标『内容示例,可删除』", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L268(§8.3 #61)"}},
175
+ {"candidate_id": "KNOWLEDGE.FP.GRID.GLOBAL_TD_WIDTH", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "Anti-patterns", "classification": "FAILURE_PATTERN", "statement_zh": "失败模式:为某报表添加全局 .table td { width } 规则,导致全部列表与宽表列宽同时漂移。", "statement_en_keywords": "failure pattern, global td width css, cross-table blast radius", "applies_when": {"lane": "frontend", "condition": "表格样式变更"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "可与项目侧 CSS 扫描器联动检测全局列宽规则(pilot-0001 R-E:旧包工具专名引用已剥离为通用表述;statement 本身通用,无需降级)", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L269(§8.3 #62)"}},
176
+ {"candidate_id": "AUTHORITY.WEB.GRID.OWNERSHIP", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "Ownership", "classification": "UNIVERSAL_POLICY", "statement_zh": "权威分配默认值:表格平台 Owner 维护壳,领域 Owner 维护列 schema,页面 Owner 维护例外。", "statement_en_keywords": "grid platform owner, domain column schema owner, page exception owner", "applies_when": {"lane": "frontend", "condition": "Authority Map 构建"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "三层例外结构恰是 vNext『Universal/Project/Lane 分离』的微缩模型;pilot-0001 M6:同型上提审阅登记(见 AUTHORITY.CHG.CHANGE_OWNERS),留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L270(§8.3 #63)"}},
177
+ {"candidate_id": "POLICY.WEB.GRID.SCHEMA_VERSIONING", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/frontend-hard-spec/assets/universal/30-data-grid-protocol.md", "source_section": "Change Policy", "classification": "LANE_POLICY", "statement_zh": "列 schema 与保存视图结构必须版本化;公共行为变化须走影响评估并附视觉回归。", "statement_en_keywords": "column schema versioning, saved view versioning, visual regression", "applies_when": {"lane": "frontend", "condition": "列 schema 或保存视图结构变更"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "引用 POLICY.CHG.* 影响评估族", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L271(§8.3 #64)"}},
178
+
179
+ {"candidate_id": "POLICY.CHG.PRECHANGE_SCAN_BE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "MUST", "classification": "DUPLICATE", "statement_zh": "契约变更前必须识别消费者、兼容窗口、迁移、回滚与版本策略。", "statement_en_keywords": "pre-change scan, consumers, compatibility window, migration, rollback, version strategy", "applies_when": {"lane": "backend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "跨车道重复:与 FE06 POLICY.CHG.PRECHANGE_CONSUMER_SCAN + COMPAT_MIGRATION_ROLLBACK 同构 → 合并为单一 UNIVERSAL 正本,本条为 BE 侧让位副本", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L277(§8.4 #65)", "reject_reason": "M1 让位副本:六要素已并入正本(报告 §8.4 #65;§3.2 M1 合并稿)", "duplicate_of": "POLICY.CHG.PRECHANGE_CONSUMER_SCAN"}},
180
+ {"candidate_id": "POLICY.CHG.NO_DELETE_NO_MIGRATION_BE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "MUST NOT", "classification": "DUPLICATE", "statement_zh": "无迁移说明不得删除、重命名或改变已发布语义。", "statement_en_keywords": "no removal/rename/semantic change without migration note", "applies_when": {"lane": "backend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "跨车道重复:POLICY.CHG.DEPRECATE_BEFORE_DELETE 的 BE 形态 → 让位合并", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L278(§8.4 #66)", "reject_reason": "M2 让位:BE 禁止形态已并入正本(报告 §8.4 #66;§3.2 M2 合并稿)", "duplicate_of": "POLICY.CHG.DEPRECATE_BEFORE_DELETE"}},
181
+ {"candidate_id": "POLICY.CHG.OBSERVABLE_EVOLUTION", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "SHOULD", "classification": "UNIVERSAL_POLICY", "statement_zh": "契约演进建议优先采用可并行部署、可观测、可撤回的方式。", "statement_en_keywords": "parallel deployable, observable, reversible evolution", "applies_when": {"lane": "any", "condition": "契约演进方式选择"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory;FE 侧无对应条款,独有增量", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L279(§8.4 #67)"}},
182
+ {"candidate_id": "POLICY.TPL.CHG_RECORD_BE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "Contract", "classification": "CONTRACT_TEMPLATE", "statement_zh": "后端变更记录必须含:旧行为、新行为、影响面、兼容判断、验证证据。", "statement_en_keywords": "change record fields, old/new behavior, impact surface, compatibility judgment, verification evidence", "applies_when": {"lane": "backend", "condition": "记录契约变更"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "pilot-0001 M4 裁决执行:统一 CHANGE_RECORD 模板第二 lane profile(BE profile 承载旧行为/新行为/影响面/兼容判断/验证证据),互引 POLICY.TPL.CHG_RECORD;R-C=b:暂留 candidates-draft,落点挂起同上", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L280(§8.4 #68)"}},
183
+ {"candidate_id": "GATE.BE.CHG.CONTRACT_CHANGE_CHECKS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "Checklist", "classification": "GATE_RECIPE", "statement_zh": "契约变更门禁:API、数据(migration)、消息、配置与运行五类消费者均已检查。", "statement_en_keywords": "contract change gate, five consumer classes checked", "applies_when": {"lane": "backend", "condition": "契约变更过门禁"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "五类消费者枚举可直接做成 checklist gate", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L281(§8.4 #69)"}},
184
+ {"candidate_id": "KNOWLEDGE.CHG.EXAMPLE_COMPAT_WINDOW", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "Examples", "classification": "KNOWLEDGE_PATTERN", "statement_zh": "示例:新字段先以兼容方式发布,消费者迁移完成后再关闭旧版本窗口。", "statement_en_keywords": "example, compatible release, version window closure", "applies_when": {"lane": "backend", "condition": "字段级契约演进"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "与 FE06 EXAMPLE_PROP_MIGRATION 同型(跨车道知识同构,Catalog 可合并为一条);pilot-0001 M5:互引已建立,合并候选留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L282(§8.4 #70)"}},
185
+ {"candidate_id": "KNOWLEDGE.FP.BE.CONTRACT_DRIFT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "Anti-patterns", "classification": "FAILURE_PATTERN", "statement_zh": "失败模式:只改实现而不同步 OpenAPI、migration、事件 schema 或变更记录。", "statement_en_keywords": "failure pattern, implementation-only change, contract drift", "applies_when": {"lane": "backend", "condition": "变更收尾检查"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "B3 failure-pattern 附带池成员;正是 vNext Contract Gate(openapi 对账)的对症场景;pilot-0001 M7 互引:POLICY.CHG.SYNC_CONTRACT_DOCS_TESTS(本失败模式即其缺位形态)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L283(§8.4 #71)"}},
186
+ {"candidate_id": "AUTHORITY.BE.CONTRACT_OWNERSHIP", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "Ownership", "classification": "UNIVERSAL_POLICY", "statement_zh": "权威分配默认值:契约提供方维护兼容方案,消费方确认迁移完成。", "statement_en_keywords": "provider owns compatibility, consumer confirms migration", "applies_when": {"lane": "any", "condition": "Authority Map 构建"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "与 FE06 AUTHORITY.CHG.CHANGE_OWNERS 结构同型(提供/消费/仲裁三方);pilot-0001 M6:同型上提审阅登记(5→1+N),留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L284(§8.4 #72)"}},
187
+ {"candidate_id": "POLICY.CHG.BREAKING_VERSIONING_BE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/08-contract-change-protocol.md", "source_section": "Change Policy", "classification": "DUPLICATE", "statement_zh": "破坏性变更必须经显式审批、版本升级并附可执行回退方案。", "statement_en_keywords": "breaking change, explicit approval, version upgrade, executable rollback", "applies_when": {"lane": "backend", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "跨车道重复:POLICY.CHG.BREAKING_VERSIONING 的 BE 形态;『显式审批』『可执行回退』两个子句建议 Human Review 时并入正本", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L285(§8.4 #73)", "reject_reason": "M3 让位:显式审批+可执行回退两子句已并入正本(报告 §8.4 #73;§3.2 M3 合并稿)", "duplicate_of": "POLICY.CHG.BREAKING_VERSIONING"}},
188
+
189
+ {"candidate_id": "POLICY.API.CONTRACT_IMPL_CONSISTENCY", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "MUST", "classification": "UNIVERSAL_POLICY", "statement_zh": "接口的 method、path、字段、状态码、错误码、权限与兼容策略必须与实现一致。", "statement_en_keywords": "contract-implementation consistency, method/path/fields/status/error codes", "applies_when": {"lane": "any", "condition": "任何接口实现或变更"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "Contract Gate 策略正源;经 operationId 机器键(D15)可机判,M4 首选 gate 化对象", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L291(§8.5 #74)"}},
190
+ {"candidate_id": "POLICY.API.NO_INFORMAL_CONTRACT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "MUST NOT", "classification": "UNIVERSAL_POLICY", "statement_zh": "Mock、聊天记录或调用方猜测不得作为正式契约;正式契约唯一权威 = OpenAPI 或项目显式指定的等价来源。", "statement_en_keywords": "no informal contract sources, mock/chat/guess forbidden, OpenAPI authority", "applies_when": {"lane": "any", "condition": "确定任何接口契约时"}, "enforcement": "required_when_applicable", "vocab_pr_needed": true, "notes": "与 vocab source_types 禁 ai_invention 的 fail-closed 出处纪律同构;mock_contract 的存在恰为该条款的合规出口;pilot-0001 互引:POLICY.WEB.API.TRUSTED_ENDPOINT_SOURCE(跨车道契约链)", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L292(§8.5 #75)"}},
191
+ {"candidate_id": "POLICY.API.BACKWARD_COMPAT_DEFAULTS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "SHOULD", "classification": "UNIVERSAL_POLICY", "statement_zh": "新增字段、分页、重试与版本演进应默认采用向后兼容设计。", "statement_en_keywords": "backward compatible defaults, additive fields, pagination, versioning", "applies_when": {"lane": "any", "condition": "接口演进"}, "enforcement": "advisory", "vocab_pr_needed": true, "notes": "SHOULD 正确降级 advisory", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L293(§8.5 #76)"}},
192
+ {"candidate_id": "POLICY.TPL.OPERATION_CONTRACT_FIELDS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "Contract", "classification": "CONTRACT_TEMPLATE", "statement_zh": "每个接口必须定义输入、输出、失败、幂等、权限、追踪与版本七类语义。", "statement_en_keywords": "per-operation contract fields, input/output/failure/idempotency/permission/trace/version", "applies_when": {"lane": "any", "condition": "登记 contract_operation 对象"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "与 02 信封 contract_operation payload(request_need/response_need)对接审阅;pilot-0001 R-C=b:暂留 candidates-draft,落点挂起同上,对接审留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L294(§8.5 #77)"}},
193
+ {"candidate_id": "GATE.BE.API.CONTRACT_CHECKS", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "Checklist", "classification": "GATE_RECIPE", "statement_zh": "API 契约门禁:契约、实现、生成客户端、测试与 handoff 五者已同步。", "statement_en_keywords": "contract gate, sync across contract/implementation/client/tests/handoff", "applies_when": {"lane": "any", "condition": "接口变更过门禁"}, "enforcement": "deterministic_where_possible", "vocab_pr_needed": true, "notes": "GATE. 前缀需 vocab PR;与 M4 Contract Gate vNext 检查集对照;pilot-0001 §3.4 互指:与 POLICY.CHG.SYNC_CONTRACT_DOCS_TESTS 同步清单对象不同、重叠约 60%(契约/示例/测试/文档/通知 vs 契约/实现/生成客户端/测试/handoff),两口径统一留 Owner 后续裁决", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L295(§8.5 #78)"}},
194
+ {"candidate_id": "KNOWLEDGE.API.EXAMPLE_STABLE_ERROR_CODE", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "Examples", "classification": "KNOWLEDGE_PATTERN", "statement_zh": "示例:冲突场景返回稳定错误码 + TraceId,而非泄露内部异常。", "statement_en_keywords": "example, stable error code, trace id, no internal leak", "applies_when": {"lane": "any", "condition": "错误响应设计"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "与 ERR.* 词条体系(error-taxonomy D18)衔接", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L296(§8.5 #79)"}},
195
+ {"candidate_id": "KNOWLEDGE.FP.API.FIELD_DRIFT_NO_CONTRACT", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "Anti-patterns", "classification": "FAILURE_PATTERN", "statement_zh": "失败模式:修改响应字段却不更新正式契约与调用方兼容测试。", "statement_en_keywords": "failure pattern, field change without contract update, missing consumer compat tests", "applies_when": {"lane": "any", "condition": "接口字段变更"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "B3 failure-pattern 附带池成员", "review": {"disposition": "ACCEPT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L297(§8.5 #80)"}},
196
+ {"candidate_id": "AUTHORITY.BE.API_CONTRACT_OWNERSHIP", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "Ownership", "classification": "UNIVERSAL_POLICY", "statement_zh": "权威分配默认值:Backend 维护服务端契约,消费方确认联调与兼容结果。", "statement_en_keywords": "backend owns server contract, consumer confirms integration", "applies_when": {"lane": "any", "condition": "Authority Map 构建"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "frontend-only + 已发布外部契约型项目须叠加边界条款(契约提供方为外部系统时不做 owner 审批仪式,改为消费侧确认联调结果)——防止项目特例固化进 global 正本的反例示范(pilot-0001 R-E:项目专名已改写为通用边界模式描述);M6:五条 authority 结构同型,5→1+N 上提审阅登记,留后续批次", "review": {"disposition": "ADJUST", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L298(§8.5 #81)"}},
197
+ {"candidate_id": "POLICY.API.DELEGATE_TO_CHG_PROTOCOL", "source": "design_seed", "evidence": "PLANNED", "source_protocol": "pomaster/components/backend-hard-spec/assets/universal/12-api-contract-protocol.md", "source_section": "Change Policy", "classification": "DUPLICATE", "statement_zh": "破坏性 API 变化必须按契约变更协议执行版本与迁移。", "statement_en_keywords": "breaking api change delegates to contract change protocol", "applies_when": {"lane": "any", "condition": "同合并目标"}, "enforcement": "advisory", "vocab_pr_needed": false, "notes": "指针条款:委托至 POLICY.CHG.BREAKING_VERSIONING,无独立语义 → 让位合并", "review": {"disposition": "REJECT", "seq": "pilot-0001", "ref": "docs/catalog-pilot-report.md:L299(§8.5 #82)", "reject_reason": "指针条款并入 BREAKING_VERSIONING,无独立语义(报告 §8.5 #82)", "duplicate_of": "POLICY.CHG.BREAKING_VERSIONING"}}
198
+ ]