pomaster 0.3.0 → 0.5.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 (344) hide show
  1. package/README.md +57 -22
  2. package/catalog/archetypes/archetype.frontend.error_taxonomy.json +13 -5
  3. package/catalog/archetypes/archetype.frontend.feature_oriented.json +1 -1
  4. package/catalog/archetypes/archetype.state.async_command.json +4 -4
  5. package/catalog/catalog-lock.draft.json +1120 -104
  6. package/catalog/gates/gate.be.api.contract_checks.json +2 -1
  7. package/catalog/gates/gate.be.chg.contract_change_checks.json +2 -1
  8. package/catalog/gates/gate.chg.prechange_checks.json +2 -1
  9. package/catalog/gates/gate.web.api.request_checks.json +2 -1
  10. package/catalog/gates/gate.web.grid.checks.json +2 -1
  11. package/catalog/knowledge/knowledge.api.example_stable_error_code.json +2 -1
  12. package/catalog/knowledge/knowledge.chg.example_compat_window.json +2 -1
  13. package/catalog/knowledge/knowledge.chg.example_prop_migration.json +2 -1
  14. package/catalog/knowledge/knowledge.fp.api.field_drift_no_contract.json +2 -1
  15. package/catalog/knowledge/knowledge.fp.api.per_page_http_client.json +2 -1
  16. package/catalog/knowledge/knowledge.fp.be.contract_drift.json +2 -1
  17. package/catalog/knowledge/knowledge.fp.chg.page_local_padding.json +2 -1
  18. package/catalog/knowledge/knowledge.fp.grid.global_td_width.json +2 -1
  19. package/catalog/knowledge/knowledge.web.api.example_get_entity_list.json +2 -1
  20. package/catalog/knowledge/knowledge.web.grid.example_column_preset.json +2 -1
  21. package/catalog/policies/authority.be.api_contract_ownership.json +2 -1
  22. package/catalog/policies/authority.be.contract_ownership.json +2 -1
  23. package/catalog/policies/authority.chg.change_owners.json +2 -1
  24. package/catalog/policies/authority.web.api.request_owners.json +2 -1
  25. package/catalog/policies/authority.web.grid.ownership.json +2 -1
  26. package/catalog/policies/policy.ai.change_plan_first.json +91 -0
  27. package/catalog/policies/policy.ai.fact_inference_separation.json +91 -0
  28. package/catalog/policies/policy.ai.read_search_verify_before_write.json +92 -0
  29. package/catalog/policies/policy.ai.rule_relaxation_approval.json +91 -0
  30. package/catalog/policies/policy.api.backward_compat_defaults.json +2 -1
  31. package/catalog/policies/policy.api.contract_impl_consistency.json +2 -1
  32. package/catalog/policies/policy.api.no_informal_contract.json +2 -1
  33. package/catalog/policies/policy.arch.adr_immutable_history.json +91 -0
  34. package/catalog/policies/policy.arch.decision_tradeoff_record.json +2 -1
  35. package/catalog/policies/policy.arch.no_convenience_over_boundary.json +93 -0
  36. package/catalog/policies/policy.arch.prefer_verifiable_option.json +92 -0
  37. package/catalog/policies/policy.authz.no_gating_proxy_trust.json +99 -0
  38. package/catalog/policies/policy.authz.permission_scope_expansion_gate.json +99 -0
  39. package/catalog/policies/policy.authz.server_five_factor_verification.json +101 -0
  40. package/catalog/policies/policy.be.conc.prefer_db_constraints.json +97 -0
  41. package/catalog/policies/policy.be.db.expand_migrate_contract.json +97 -0
  42. package/catalog/policies/policy.be.idem.key_payload_conflict.json +97 -0
  43. package/catalog/policies/policy.be.model.single_boundary_conversion.json +97 -0
  44. package/catalog/policies/policy.be.sql.index_for_known_queries.json +97 -0
  45. package/catalog/policies/policy.be.state.single_rule_source.json +97 -0
  46. package/catalog/policies/policy.be.txn.short_locks_compensation.json +96 -0
  47. package/catalog/policies/policy.bound.search_first_entry_only.json +91 -0
  48. package/catalog/policies/policy.boundary.validate_in_encode_out.json +92 -0
  49. package/catalog/policies/policy.cache.failure_mode_guards.json +93 -0
  50. package/catalog/policies/policy.cache.lifecycle_definition.json +2 -1
  51. package/catalog/policies/policy.cache.schema_versioning.json +91 -0
  52. package/catalog/policies/policy.cfg.config_attribute_completeness.json +95 -0
  53. package/catalog/policies/policy.cfg.key_rename_dual_read.json +92 -0
  54. package/catalog/policies/policy.cfg.no_secret_dispersal.json +90 -0
  55. package/catalog/policies/policy.cfg.production_safe_defaults.json +92 -0
  56. package/catalog/policies/policy.cfg.schema_backed_config.json +92 -0
  57. package/catalog/policies/policy.chg.affect_templates.json +2 -1
  58. package/catalog/policies/policy.chg.breaking_versioning.json +2 -1
  59. package/catalog/policies/policy.chg.compat_migration_rollback.json +2 -1
  60. package/catalog/policies/policy.chg.deprecate_before_delete.json +2 -1
  61. package/catalog/policies/policy.chg.fix_at_root_cause_level.json +2 -1
  62. package/catalog/policies/policy.chg.no_unrelated_changes.json +91 -0
  63. package/catalog/policies/policy.chg.observable_evolution.json +2 -1
  64. package/catalog/policies/policy.chg.prechange_consumer_scan.json +2 -1
  65. package/catalog/policies/policy.chg.staged_rollout.json +2 -1
  66. package/catalog/policies/policy.chg.sync_contract_docs_tests.json +2 -1
  67. package/catalog/policies/policy.conflict.priority_ladder.json +2 -1
  68. package/catalog/policies/policy.contract.no_invented_facts.json +93 -0
  69. package/catalog/policies/policy.dep.admission_six_dimension_check.json +2 -1
  70. package/catalog/policies/policy.dep.build_path_supply_chain.json +93 -0
  71. package/catalog/policies/policy.dep.change_surface_review.json +2 -1
  72. package/catalog/policies/policy.dep.introduction_review.json +2 -1
  73. package/catalog/policies/policy.dep.no_untrusted_source_no_lock_bypass.json +92 -0
  74. package/catalog/policies/policy.dep.time_boxed_urgent_exception.json +91 -0
  75. package/catalog/policies/policy.deploy.no_dev_env_as_production_fact.json +91 -0
  76. package/catalog/policies/policy.deploy.operational_capabilities.json +93 -0
  77. package/catalog/policies/policy.deploy.runtime_fact_record.json +97 -0
  78. package/catalog/policies/policy.derived.single_implementation.json +2 -1
  79. package/catalog/policies/policy.err.failure_five_part_mapping.json +101 -0
  80. package/catalog/policies/policy.err.no_internal_detail_exposure.json +97 -0
  81. package/catalog/policies/policy.err.published_code_immutable.json +98 -0
  82. package/catalog/policies/policy.evid.acceptance_binds_verifiable_evidence.json +92 -0
  83. package/catalog/policies/policy.evid.no_silent_gate_removal.json +90 -0
  84. package/catalog/policies/policy.evid.no_unverifiable_pass.json +92 -0
  85. package/catalog/policies/policy.flag.cleanup_after_full_rollout.json +94 -0
  86. package/catalog/policies/policy.flag.consistent_off_state.json +92 -0
  87. package/catalog/policies/policy.flag.kill_switch.json +91 -0
  88. package/catalog/policies/policy.flag.lifecycle_metadata.json +93 -0
  89. package/catalog/policies/policy.flag.not_a_permission.json +92 -0
  90. package/catalog/policies/policy.gate.p0_non_bypassable.json +92 -0
  91. package/catalog/policies/policy.gate.risk_factors_confirmed.json +93 -0
  92. package/catalog/policies/policy.guard.no_check_weakening.json +92 -0
  93. package/catalog/policies/policy.integration.call_definition_minimum.json +95 -0
  94. package/catalog/policies/policy.integration.fault_containment.json +94 -0
  95. package/catalog/policies/policy.job.lifecycle_definition.json +96 -0
  96. package/catalog/policies/policy.job.no_unmanaged_execution.json +92 -0
  97. package/catalog/policies/policy.job.operational_features.json +93 -0
  98. package/catalog/policies/policy.obs.actionable_signals.json +93 -0
  99. package/catalog/policies/policy.obs.alert_with_owner.json +91 -0
  100. package/catalog/policies/policy.obs.context_field_baseline.json +91 -0
  101. package/catalog/policies/policy.obs.correlation_context_minimum.json +2 -1
  102. package/catalog/policies/policy.obs.no_sensitive_or_unbounded_logging.json +92 -0
  103. package/catalog/policies/policy.obs.no_sensitive_raw_values.json +93 -0
  104. package/catalog/policies/policy.obs.rum_dimension_whitelist.json +2 -1
  105. package/catalog/policies/policy.obs.signal_change_impact.json +91 -0
  106. package/catalog/policies/policy.obs.source_map_access_control.json +92 -0
  107. package/catalog/policies/policy.obs.telemetry_lifecycle_declared.json +93 -0
  108. package/catalog/policies/policy.obs.trace_correlation.json +91 -0
  109. package/catalog/policies/policy.perf.budget_change_retest.json +91 -0
  110. package/catalog/policies/policy.perf.evidence_binding.json +95 -0
  111. package/catalog/policies/policy.perf.observation_dimensions.json +94 -0
  112. package/catalog/policies/policy.proc.checklist_change_policy.json +91 -0
  113. package/catalog/policies/policy.proc.pre_code_declaration.json +2 -1
  114. package/catalog/policies/policy.proc.scope_drift_reclassify.json +91 -0
  115. package/catalog/policies/policy.prv.processing_scope_re_review.json +97 -0
  116. package/catalog/policies/policy.prv.sensitive_data_six_facts.json +102 -0
  117. package/catalog/policies/policy.registry.human_fields_validated_decorrelated.json +93 -0
  118. package/catalog/policies/policy.rel.no_irreversible_unmonitored_full_release.json +91 -0
  119. package/catalog/policies/policy.rel.observability_before_ship.json +91 -0
  120. package/catalog/policies/policy.rel.pre_release_confirmation.json +2 -1
  121. package/catalog/policies/policy.rel.process_change_needs_drill_audit.json +91 -0
  122. package/catalog/policies/policy.rel.traceable_build.json +93 -0
  123. package/catalog/policies/policy.role.domain_decision_authority.json +2 -1
  124. package/catalog/policies/policy.role.human_signs_for_ai.json +93 -0
  125. package/catalog/policies/policy.sec.authn_policy_unified.json +91 -0
  126. package/catalog/policies/policy.sec.no_client_side_trust.json +95 -0
  127. package/catalog/policies/policy.sec.no_longterm_security_disable.json +91 -0
  128. package/catalog/policies/policy.sec.no_script_readable_credentials.json +91 -0
  129. package/catalog/policies/policy.sec.no_secrets_in_client_surface.json +91 -0
  130. package/catalog/policies/policy.sec.relaxation_approval.json +92 -0
  131. package/catalog/policies/policy.sec.security_relaxation_gate.json +95 -0
  132. package/catalog/policies/policy.sec.third_party_execution_register.json +2 -1
  133. package/catalog/policies/policy.sec.trust_boundary_enforcement.json +96 -0
  134. package/catalog/policies/policy.sec.upload_download_server_recheck.json +91 -0
  135. package/catalog/policies/policy.sec.url_source_allowlist.json +91 -0
  136. package/catalog/policies/policy.spec.admission_criteria.json +2 -1
  137. package/catalog/policies/policy.spec.derived_view_regeneration.json +2 -1
  138. package/catalog/policies/policy.spec.draft_not_baseline.json +2 -1
  139. package/catalog/policies/policy.spec.family_conflict_precedence.json +93 -0
  140. package/catalog/policies/policy.spec.file_structure_contract.json +2 -1
  141. package/catalog/policies/policy.spec.freeze_before_use.json +93 -0
  142. package/catalog/policies/policy.spec.metadata_required.json +2 -1
  143. package/catalog/policies/policy.spec.post_dev_backfill_classify.json +2 -1
  144. package/catalog/policies/policy.spec.primary_source_basis.json +93 -0
  145. package/catalog/policies/policy.spec.procedural_record_not_surrogate.json +2 -1
  146. package/catalog/policies/policy.spec.semantic_identity.json +2 -1
  147. package/catalog/policies/policy.spec.unresolved_ledger_gate.json +2 -1
  148. package/catalog/policies/policy.stack.derived_store_not_authority.json +93 -0
  149. package/catalog/policies/policy.stack.dual_web_stack_boundary.json +93 -0
  150. package/catalog/policies/policy.stack.entry_chain_recorded.json +93 -0
  151. package/catalog/policies/policy.stack.entry_limits_aligned.json +94 -0
  152. package/catalog/policies/policy.stack.local_form_not_prod_fact.json +93 -0
  153. package/catalog/policies/policy.stack.multi_datastore_ownership.json +93 -0
  154. package/catalog/policies/policy.stack.no_implicit_selection.json +2 -1
  155. package/catalog/policies/policy.stack.persistence_coexistence_scope.json +93 -0
  156. package/catalog/policies/policy.stack.toolchain_versions_pinned.json +95 -0
  157. package/catalog/policies/policy.stack.upgrade_compat_verified.json +93 -0
  158. package/catalog/policies/policy.struct.module_entry_dependency_declared.json +92 -0
  159. package/catalog/policies/policy.struct.no_unexplained_top_level_dir.json +91 -0
  160. package/catalog/policies/policy.struct.reuse_proven_structure.json +91 -0
  161. package/catalog/policies/policy.test.control_nondeterminism_keep_diagnosis.json +91 -0
  162. package/catalog/policies/policy.test.isolation_and_cleanup.json +93 -0
  163. package/catalog/policies/policy.test.no_synthetic_stability.json +92 -0
  164. package/catalog/policies/policy.test.pyramid_and_ci_matrix.json +92 -0
  165. package/catalog/policies/policy.test.removal_justification.json +91 -0
  166. package/catalog/policies/policy.test.removal_needs_substitute_evidence.json +91 -0
  167. package/catalog/policies/policy.test.risk_driven_plan.json +92 -0
  168. package/catalog/policies/policy.test.stable_observable_assertions.json +92 -0
  169. package/catalog/policies/policy.tool.discoverable_toolchain.json +92 -0
  170. package/catalog/policies/policy.tool.no_hand_edit_generated_no_ci_drift.json +91 -0
  171. package/catalog/policies/policy.tool.no_vendored_body_edits.json +94 -0
  172. package/catalog/policies/policy.tool.scoped_scan_boundary.json +2 -1
  173. package/catalog/policies/policy.tool.upgrade_verify_lock_rollback.json +92 -0
  174. package/catalog/policies/policy.web.api.auth_app_client_split.json +2 -1
  175. package/catalog/policies/policy.web.api.client_change_impact.json +2 -1
  176. package/catalog/policies/policy.web.api.domain_api_only.json +2 -1
  177. package/catalog/policies/policy.web.api.error_normalization.json +2 -1
  178. package/catalog/policies/policy.web.api.generated_client.json +2 -1
  179. package/catalog/policies/policy.web.api.late_result_guard.json +2 -1
  180. package/catalog/policies/policy.web.api.mutation_idempotency.json +2 -1
  181. package/catalog/policies/policy.web.api.no_network_optimism.json +2 -1
  182. package/catalog/policies/policy.web.api.query_cancel_stale_drop.json +2 -1
  183. package/catalog/policies/policy.web.api.request_infrastructure.json +2 -1
  184. package/catalog/policies/policy.web.api.retry_discipline.json +2 -1
  185. package/catalog/policies/policy.web.api.session_recovery_split.json +2 -1
  186. package/catalog/policies/policy.web.api.single_http_client.json +2 -1
  187. package/catalog/policies/policy.web.api.single_loading_source.json +2 -1
  188. package/catalog/policies/policy.web.api.transport_vs_business.json +2 -1
  189. package/catalog/policies/policy.web.api.trusted_endpoint_source.json +2 -1
  190. package/catalog/policies/policy.web.api.typed_domain_naming.json +2 -1
  191. package/catalog/policies/policy.web.arch.layer_isolation.json +2 -1
  192. package/catalog/policies/policy.web.arch.naming_conventions.json +2 -1
  193. package/catalog/policies/policy.web.arch.public_api_barrel.json +2 -1
  194. package/catalog/policies/policy.web.chg.controlled_change_triggers.json +2 -1
  195. package/catalog/policies/policy.web.comp.no_trivial_or_god_component.json +91 -0
  196. package/catalog/policies/policy.web.comp.public_contract_completeness.json +93 -0
  197. package/catalog/policies/policy.web.copy.action_object_clarity.json +92 -0
  198. package/catalog/policies/policy.web.copy.enumerable_placement.json +91 -0
  199. package/catalog/policies/policy.web.copy.error_next_step.json +92 -0
  200. package/catalog/policies/policy.web.copy.suppression_ledger_discipline.json +2 -1
  201. package/catalog/policies/policy.web.grid.column_schema_fields.json +2 -1
  202. package/catalog/policies/policy.web.grid.config_isolation.json +2 -1
  203. package/catalog/policies/policy.web.grid.freeze_key_columns.json +2 -1
  204. package/catalog/policies/policy.web.grid.interaction_registry.json +2 -1
  205. package/catalog/policies/policy.web.grid.keyboard_clipboard.json +2 -1
  206. package/catalog/policies/policy.web.grid.schema_driven_shell.json +2 -1
  207. package/catalog/policies/policy.web.grid.schema_versioning.json +2 -1
  208. package/catalog/policies/policy.web.grid.server_ops_virtualization.json +2 -1
  209. package/catalog/policies/policy.web.grid.shell_change_matrix.json +2 -1
  210. package/catalog/policies/policy.web.grid.width_fix_ladder.json +2 -1
  211. package/catalog/policies/policy.web.handoff.state_matrix_full.json +94 -0
  212. package/catalog/policies/policy.web.i18n.copy_key_discipline.json +92 -0
  213. package/catalog/policies/policy.web.i18n.raw_value_for_compute.json +91 -0
  214. package/catalog/policies/policy.web.page.region_consistency.json +93 -0
  215. package/catalog/policies/policy.web.perf.budget_skeleton.json +2 -1
  216. package/catalog/policies/policy.web.style.ownership_matrix.json +2 -1
  217. package/catalog/policies/policy.web.track.attempt_result_correlation.json +91 -0
  218. package/catalog/policies/policy.web.track.consent_lifecycle.json +2 -1
  219. package/catalog/policies/policy.web.track.no_synthetic_actions.json +92 -0
  220. package/catalog/policies/policy.web.track.privacy_default_deny.json +2 -1
  221. package/catalog/policies/policy.web.track.stable_event_keys.json +2 -1
  222. package/catalog/policies/policy.web.track.typed_client_validation.json +91 -0
  223. package/catalog/policies/policy.web.uiux.provider_evidence_not_business_truth.json +2 -1
  224. package/catalog/policies/policy.wf.no_planned_as_verified.json +91 -0
  225. package/catalog/policies/policy.wf.task_facts_preconfirm.json +94 -0
  226. package/catalog/policies/profile.baseline.java_enterprise_default.json +96 -0
  227. package/catalog/sensors/sensor.browser.deterministic.json +2 -1
  228. package/catalog/sensors/sensor.browser.interactive.json +2 -1
  229. package/catalog/sensors/sensor.build.static.json +2 -1
  230. package/catalog/sensors/sensor.contract.conformance.json +2 -1
  231. package/catalog/sensors/sensor.performance.budget.json +2 -1
  232. package/catalog/sensors/sensor.production.metric.json +2 -1
  233. package/catalog/tools/seed_b6b_frontend.py +1424 -0
  234. package/catalog/tools/seed_b6c_backend.py +1495 -0
  235. package/catalog/tools/seed_b6d_baseline.py +620 -0
  236. package/catalog/tools/seed_b6e_evidence.py +1305 -0
  237. package/catalog/tools/seed_d3_review.py +1105 -0
  238. package/catalog/tools/seed_v06_batch2_materials.py +27 -18
  239. package/dist/bin.js +20514 -10735
  240. package/package.json +2 -1
  241. package/seeds/aggregation-manifest.json +691 -0
  242. package/seeds/baseline/backend/api-contract.md +26 -0
  243. package/seeds/baseline/backend/architecture.md +31 -0
  244. package/seeds/baseline/backend/data-access.md +31 -0
  245. package/seeds/baseline/backend/directory-structure.md +11 -0
  246. package/seeds/baseline/backend/integration-runtime.md +21 -0
  247. package/seeds/baseline/backend/quality.md +31 -0
  248. package/seeds/baseline/backend/stack.yaml +13 -0
  249. package/seeds/baseline/backend/transaction-concurrency.md +26 -0
  250. package/seeds/baseline/data/lineage.md +11 -0
  251. package/seeds/baseline/data/migration.md +11 -0
  252. package/seeds/baseline/data/model.md +31 -0
  253. package/seeds/baseline/data/precision-units.md +31 -0
  254. package/seeds/baseline/data/quality.md +31 -0
  255. package/seeds/baseline/frontend/api-and-error.md +21 -0
  256. package/seeds/baseline/frontend/architecture.md +26 -0
  257. package/seeds/baseline/frontend/design-system.md +21 -0
  258. package/seeds/baseline/frontend/directory-structure.md +16 -0
  259. package/seeds/baseline/frontend/quality.md +26 -0
  260. package/seeds/baseline/frontend/stack.yaml +17 -0
  261. package/seeds/baseline/frontend/state-and-data.md +26 -0
  262. package/seeds/baseline/manifest.yaml +32 -0
  263. package/seeds/baseline/platform/delivery.md +36 -0
  264. package/seeds/baseline/platform/environment.md +11 -0
  265. package/seeds/baseline/platform/observability.md +31 -0
  266. package/seeds/baseline/platform/security.md +26 -0
  267. package/seeds/manifest.json +1429 -0
  268. package/seeds/specs/evidence/accessibility.md +89 -0
  269. package/seeds/specs/evidence/architecture.md +89 -0
  270. package/seeds/specs/evidence/browser-e2e.md +91 -0
  271. package/seeds/specs/evidence/build.md +91 -0
  272. package/seeds/specs/evidence/business-acceptance.md +89 -0
  273. package/seeds/specs/evidence/complexity-crap.md +97 -0
  274. package/seeds/specs/evidence/contract.md +89 -0
  275. package/seeds/specs/evidence/coverage.md +91 -0
  276. package/seeds/specs/evidence/data-migration.md +91 -0
  277. package/seeds/specs/evidence/dead-code-duplicate.md +89 -0
  278. package/seeds/specs/evidence/dependency-supply-chain.md +89 -0
  279. package/seeds/specs/evidence/index.md +55 -0
  280. package/seeds/specs/evidence/mutation.md +89 -0
  281. package/seeds/specs/evidence/performance.md +89 -0
  282. package/seeds/specs/evidence/release.md +91 -0
  283. package/seeds/specs/evidence/runtime-observability.md +91 -0
  284. package/seeds/specs/evidence/security.md +89 -0
  285. package/seeds/specs/evidence/typecheck-lint.md +91 -0
  286. package/seeds/specs/evidence/unit-component-integration.md +91 -0
  287. package/seeds/specs/evidence/visual-regression.md +89 -0
  288. package/seeds/specs/hard/stacks/antdesign/antdesign-ui-overlay.md +48 -0
  289. package/seeds/specs/hard/stacks/antdesign/index.md +20 -0
  290. package/seeds/specs/hard/stacks/css/css-system-overlay.md +52 -0
  291. package/seeds/specs/hard/stacks/css/index.md +20 -0
  292. package/seeds/specs/hard/stacks/geist/geist-design-system-overlay.md +48 -0
  293. package/seeds/specs/hard/stacks/geist/index.md +20 -0
  294. package/seeds/specs/hard/stacks/java/index.md +20 -0
  295. package/seeds/specs/hard/stacks/java/java-language-overlay.md +35 -0
  296. package/seeds/specs/hard/stacks/jpa/index.md +20 -0
  297. package/seeds/specs/hard/stacks/jpa/jpa-persistence-overlay.md +35 -0
  298. package/seeds/specs/hard/stacks/kubernetes-ingress/index.md +20 -0
  299. package/seeds/specs/hard/stacks/kubernetes-ingress/kubernetes-ingress-overlay.md +35 -0
  300. package/seeds/specs/hard/stacks/messaging/index.md +20 -0
  301. package/seeds/specs/hard/stacks/messaging/messaging-reliability-overlay.md +35 -0
  302. package/seeds/specs/hard/stacks/mybatis/index.md +20 -0
  303. package/seeds/specs/hard/stacks/mybatis/mybatis-persistence-overlay.md +35 -0
  304. package/seeds/specs/hard/stacks/mysql/index.md +20 -0
  305. package/seeds/specs/hard/stacks/mysql/mysql-database-overlay.md +35 -0
  306. package/seeds/specs/hard/stacks/nginx/index.md +20 -0
  307. package/seeds/specs/hard/stacks/nginx/nginx-proxy-overlay.md +35 -0
  308. package/seeds/specs/hard/stacks/postgresql/index.md +20 -0
  309. package/seeds/specs/hard/stacks/postgresql/postgresql-database-overlay.md +35 -0
  310. package/seeds/specs/hard/stacks/redis/index.md +20 -0
  311. package/seeds/specs/hard/stacks/redis/redis-cache-overlay.md +35 -0
  312. package/seeds/specs/hard/stacks/spring-batch/index.md +20 -0
  313. package/seeds/specs/hard/stacks/spring-batch/spring-batch-job-overlay.md +35 -0
  314. package/seeds/specs/hard/stacks/spring-boot/index.md +20 -0
  315. package/seeds/specs/hard/stacks/spring-boot/spring-boot-application-overlay.md +35 -0
  316. package/seeds/specs/hard/stacks/spring-mvc/index.md +20 -0
  317. package/seeds/specs/hard/stacks/spring-mvc/spring-mvc-web-overlay.md +35 -0
  318. package/seeds/specs/hard/stacks/spring-webflux/index.md +20 -0
  319. package/seeds/specs/hard/stacks/spring-webflux/spring-webflux-reactive-overlay.md +35 -0
  320. package/seeds/specs/hard/stacks/tomcat/index.md +20 -0
  321. package/seeds/specs/hard/stacks/tomcat/tomcat-runtime-overlay.md +35 -0
  322. package/seeds/specs/hard/stacks/vue3/index.md +20 -0
  323. package/seeds/specs/hard/stacks/vue3/vue3-framework-overlay.md +71 -0
  324. package/seeds/specs/hard/themes/ai-generated-code.md +171 -0
  325. package/seeds/specs/hard/themes/api-contract-and-error-semantics.md +532 -0
  326. package/seeds/specs/hard/themes/architecture-and-module-boundaries.md +323 -0
  327. package/seeds/specs/hard/themes/data-and-transactions.md +582 -0
  328. package/seeds/specs/hard/themes/engineering-toolchain-and-dependencies.md +333 -0
  329. package/seeds/specs/hard/themes/environment-and-configuration.md +196 -0
  330. package/seeds/specs/hard/themes/frontend-state-and-client-data.md +342 -0
  331. package/seeds/specs/hard/themes/index.md +374 -0
  332. package/seeds/specs/hard/themes/integration-and-async-runtime.md +331 -0
  333. package/seeds/specs/hard/themes/internationalization-and-copywriting.md +350 -0
  334. package/seeds/specs/hard/themes/observability-and-analytics.md +305 -0
  335. package/seeds/specs/hard/themes/page-composition-and-browser-environment.md +554 -0
  336. package/seeds/specs/hard/themes/performance-and-capacity.md +226 -0
  337. package/seeds/specs/hard/themes/permission-and-authorization.md +168 -0
  338. package/seeds/specs/hard/themes/privacy-and-data-lifecycle.md +176 -0
  339. package/seeds/specs/hard/themes/release-and-feature-flags.md +237 -0
  340. package/seeds/specs/hard/themes/security.md +372 -0
  341. package/seeds/specs/hard/themes/task-governance-and-acceptance.md +554 -0
  342. package/seeds/specs/hard/themes/testing-and-verification.md +266 -0
  343. package/seeds/specs/hard/themes/ui-presentation-and-design.md +670 -0
  344. package/seeds/specs/hard/themes/value-semantics-and-domain-data.md +339 -0
@@ -0,0 +1,331 @@
1
+ ---
2
+ seed_source: packages/cli/seeds/aggregation-manifest.json
3
+ seed_source_sha256: 039b637ccffacdfe3ce30d85e193f4b38928fcdfb16efdc4eb255e35e05af91f
4
+ seed_version: B7-THEME
5
+ lane: [backend]
6
+ status: CURRENT
7
+ authority_scope: mixed_required_and_advisory
8
+ applies_to: [backend]
9
+ related_evidence_specs: []
10
+ related_tools: []
11
+ legacy_id: theme:integration-and-async-runtime
12
+ criticality: critical # 聚合注记:取源最高;info 性注记非执行语义
13
+ injection_mode: triggered # 聚合注记:来源同值;info 性注记非执行语义
14
+ stages: [prepare, implement, check, release] # 聚合注记:来源 stages 并集;info 性注记非执行语义
15
+ triggers: [external-integration, resilience, async-job, scheduler, import-export, runtime, deployment, configuration] # 聚合注记:来源 triggers 并集;info 性注记非执行语义
16
+ requires: [] # 聚合注记:来源 requires 并集(全空)
17
+ x-aggregation: # 聚合来源(D6):逐源 vendor pin(sha256 与卡 vendor_pin 同值)
18
+ - seed_source: pomaster/components/backend-hard-spec/assets/universal/24-external-integration-resilience-protocol.md
19
+ sha256: e6b0626c9169e9126319bd08ee5d5bdbe38421cfa175509524145aee30ff539a
20
+ seed_version: B6C
21
+ - seed_source: pomaster/components/backend-hard-spec/assets/universal/25-async-job-scheduler-protocol.md
22
+ sha256: 36af3b4466b4e617a9c552a404d98ab74604752b7410e15756d7f132394fb980
23
+ seed_version: B6C
24
+ - seed_source: pomaster/components/backend-hard-spec/assets/universal/31-runtime-deployment-protocol.md
25
+ sha256: c791451de0be3aa0629fd562e2b43cc54066e4b10d786264fa7a333c561ef23a
26
+ seed_version: B6C
27
+ x-language-sections: # 语言节同步源(R-J 资产层唯一权威;注入面为同步副本)
28
+ - overlay: pomaster/components/backend-hard-spec/assets/stacks/spring-webflux/spring-webflux-reactive-overlay.md
29
+ sha256: 4d2045c5bfa66004516dffa55e965e90958270adba9599f116990ac27cc489f8
30
+ attach: primary
31
+ - overlay: pomaster/components/backend-hard-spec/assets/stacks/spring-batch/spring-batch-job-overlay.md
32
+ sha256: 58f710fcfeeaeafcaa19fd4ef27bce22c3c34d8d1ef7992f95f65a3e1bd9cd78
33
+ attach: primary
34
+ - overlay: pomaster/components/backend-hard-spec/assets/stacks/tomcat/tomcat-runtime-overlay.md
35
+ sha256: 133f15dbb7866e9e06cecf4e2cfcc2b2f14eeb06d9ea3d29be68c9e11cdd1e11
36
+ attach: primary
37
+ - overlay: pomaster/components/backend-hard-spec/assets/stacks/nginx/nginx-proxy-overlay.md
38
+ sha256: 442da24b2bb5274003978636cf793bae02b25f24aa080fcc926c5347da39ce19
39
+ attach: primary
40
+ - overlay: pomaster/components/backend-hard-spec/assets/stacks/kubernetes-ingress/kubernetes-ingress-overlay.md
41
+ sha256: 4369b51a677453c24b5ec4d4b97001c91932918fc779c55562012ebc6b312bf5
42
+ attach: primary
43
+ - overlay: pomaster/components/backend-hard-spec/assets/stacks/messaging/messaging-reliability-overlay.md
44
+ sha256: ed7f82208521675510ab4a42b229f9be269a52514cf5188c9bf83323d7590572
45
+ attach: primary
46
+ ---
47
+
48
+ # 集成与异步运行时
49
+
50
+ > **聚合纪律**:本文档 12 节正文规则行逐字取自 frontmatter x-aggregation 所列来源协议(节内按「端 → 源编号升序」以加粗来源行分块,源内标题与层级原样保留),零新增、零改写、零删除;新增文本仅限文档标题、本注记与逐节来源行。
51
+ 文末「语言与栈节」为 stacks overlay 资产 Scope/Rules/Checklist 的逐字节同步副本(标题降 2 级,正文零改动)——资产层为唯一权威,改规则只改 overlay、本区随同步。
52
+
53
+ ## Scope
54
+
55
+ **源:BE 24 外部集成与韧性协议(pomaster/components/backend-hard-spec/assets/universal/24-external-integration-resilience-protocol.md)**
56
+
57
+ 规范外部契约、超时、重试、熔断、补偿、对账和供应方故障。
58
+
59
+ **源:BE 25 异步任务与调度协议(pomaster/components/backend-hard-spec/assets/universal/25-async-job-scheduler-protocol.md)**
60
+
61
+ 规范 Job 生命周期、进度、取消、重试、调度锁、结果与保留。
62
+
63
+ **源:BE 31 运行时与部署协议(pomaster/components/backend-hard-spec/assets/universal/31-runtime-deployment-protocol.md)**
64
+
65
+ 规范部署单元、实例、网络、TLS、代理头、健康检查、容器与运行时加固。
66
+
67
+ ## Non-Scope
68
+
69
+ **源:BE 24 外部集成与韧性协议**
70
+
71
+ 不发明供应方 SLA、字段或错误语义。
72
+
73
+ **源:BE 25 异步任务与调度协议**
74
+
75
+ 不绑定具体调度器、队列或批处理框架。
76
+
77
+ **源:BE 31 运行时与部署协议**
78
+
79
+ 不默认选择 Nginx、Ingress、Tomcat、容器平台或具体 JVM 参数。
80
+
81
+ ## Terms
82
+
83
+ **源:BE 24 外部集成与韧性协议**
84
+
85
+ 补偿用于处理无法由单一原子事务覆盖的已发生副作用。
86
+
87
+ **源:BE 25 异步任务与调度协议**
88
+
89
+ Job instance 是由稳定业务参数标识的一次可追踪执行意图。
90
+
91
+ **源:BE 31 运行时与部署协议**
92
+
93
+ 部署拓扑描述入口链路、信任边界、运行单元、状态依赖与观测链路。
94
+
95
+ ## MUST
96
+
97
+ **源:BE 24 外部集成与韧性协议 · §MUST**
98
+
99
+ - 每个外部调用必须定义超时、重试条件、幂等、失败映射和恢复路径。
100
+
101
+ **源:BE 25 异步任务与调度协议 · §MUST**
102
+
103
+ - 任务必须定义身份、状态、幂等、重试、取消、超时和结果访问。
104
+
105
+ **源:BE 31 运行时与部署协议 · §MUST**
106
+
107
+ - 必须记录真实打包、启动、端口、协议、实例、状态依赖和配置来源。
108
+
109
+ ## MUST NOT
110
+
111
+ **源:BE 24 外部集成与韧性协议 · §MUST NOT**
112
+
113
+ - 不得无限重试、重试非幂等操作或在事务内执行无界调用。
114
+
115
+ **源:BE 25 异步任务与调度协议 · §MUST NOT**
116
+
117
+ - 不得用固定 sleep、无主线程或无状态记录的后台执行承载关键任务。
118
+
119
+ **源:BE 31 运行时与部署协议 · §MUST NOT**
120
+
121
+ - 不得把开发机拓扑、默认端口或未验证容器行为当作生产事实。
122
+
123
+ ## SHOULD
124
+
125
+ **源:BE 24 外部集成与韧性协议 · §SHOULD**
126
+
127
+ - 应采用隔离、熔断、限流、降级与对账控制故障扩散。
128
+
129
+ **源:BE 25 异步任务与调度协议 · §SHOULD**
130
+
131
+ - 应支持进度、心跳、并发限制、失败恢复和过期清理。
132
+
133
+ **源:BE 31 运行时与部署协议 · §SHOULD**
134
+
135
+ - 应支持优雅启动停止、健康检查、滚动发布、最小权限和故障隔离。
136
+
137
+ ## Contract
138
+
139
+ **源:BE 24 外部集成与韧性协议 · §Contract**
140
+
141
+ 集成契约必须记录版本、认证、请求响应、错误、限额、追踪与所有者。
142
+
143
+ **源:BE 25 异步任务与调度协议 · §Contract**
144
+
145
+ 任务契约必须包含触发源、参数、状态机、输出、错误、保留和权限。
146
+
147
+ **源:BE 31 运行时与部署协议 · §Contract**
148
+
149
+ 部署设计必须包含入口、网络、信任、依赖、扩缩容、恢复和证据。
150
+
151
+ ## Checklist
152
+
153
+ **源:BE 24 外部集成与韧性协议 · §Checklist**
154
+
155
+ - [ ] 超时、限流、部分失败、重复响应和供应方中断已测试。
156
+
157
+ **源:BE 25 异步任务与调度协议 · §Checklist**
158
+
159
+ - [ ] 重复触发、节点崩溃、接管、取消、重跑与过期已测试。
160
+
161
+ **源:BE 31 运行时与部署协议 · §Checklist**
162
+
163
+ - [ ] 多实例、代理链、TLS、健康、配置、日志与回滚已演练。
164
+
165
+ ## Examples
166
+
167
+ **源:BE 24 外部集成与韧性协议 · §Examples**
168
+
169
+ - 写入本地意图后异步调用供应方,并通过状态机与对账收敛。
170
+
171
+ **源:BE 25 异步任务与调度协议 · §Examples**
172
+
173
+ - 导出任务返回 job ID,调用方查询状态并从受权地址下载结果。
174
+
175
+ **源:BE 31 运行时与部署协议 · §Examples**
176
+
177
+ - 明确 Ingress 到 Service 再到应用的代理头与健康检查责任。
178
+
179
+ ## Anti-patterns
180
+
181
+ **源:BE 24 外部集成与韧性协议 · §Anti-patterns**
182
+
183
+ - 捕获外部异常后记录日志并返回业务成功。
184
+
185
+ **源:BE 25 异步任务与调度协议 · §Anti-patterns**
186
+
187
+ - 调度表达式重叠时并发执行同一不可重入任务。
188
+
189
+ **源:BE 31 运行时与部署协议 · §Anti-patterns**
190
+
191
+ - 应用无条件信任任意来源的 `X-Forwarded-*`。
192
+
193
+ ## Ownership
194
+
195
+ **源:BE 24 外部集成与韧性协议 · §Ownership**
196
+
197
+ 集成 Owner 维护供应方契约,业务 Owner 决定降级与补偿语义。
198
+
199
+ **源:BE 25 异步任务与调度协议 · §Ownership**
200
+
201
+ 任务 Owner 定义生命周期,运行平台提供调度与执行证据。
202
+
203
+ **源:BE 31 运行时与部署协议 · §Ownership**
204
+
205
+ Backend 拥有应用运行契约,平台角色拥有受控部署环境。
206
+
207
+ ## Change Policy
208
+
209
+ **源:BE 24 外部集成与韧性协议 · §Change Policy**
210
+
211
+ 供应方版本或认证变化必须经过兼容窗口和演练。
212
+
213
+ **源:BE 25 异步任务与调度协议 · §Change Policy**
214
+
215
+ 参数或状态变化必须兼容历史任务和进行中的执行。
216
+
217
+ **源:BE 31 运行时与部署协议 · §Change Policy**
218
+
219
+ 拓扑或打包变化必须同步技术基线、发布方案与运行验证。
220
+
221
+ ## 语言与栈节(overlay 资产同步区)
222
+
223
+ > 本区各小节 = stacks/ overlay 资产 Scope/Rules/Checklist 的**逐字节同步副本**(标题降 2 级,正文零改动)。资产层(overlay 文件,catalog 在册、research 锚、bound 语义挂点)为唯一权威;本区为注入面副本,改规则只改 overlay、本区随同步。x-research-anchors 留在 overlay 资产 frontmatter,不复制进本主题文档(防双锚漂移)。
224
+
225
+ ### spring-webflux(源:stacks/spring-webflux/spring-webflux-reactive-overlay.md · B02 主挂点)
226
+
227
+ #### Scope
228
+
229
+ 本 Overlay 具体化响应式请求链、背压、调度器和非阻塞边界。
230
+
231
+ #### Rules
232
+
233
+ - 必须识别并隔离阻塞 I/O,不得在事件循环中执行不可控阻塞操作。
234
+ - 必须验证取消、超时、背压和上下文传播。
235
+ - 与 Spring MVC 并存时必须记录模块、端口或应用边界。
236
+
237
+ #### Checklist
238
+
239
+ - [ ] Java 与 Spring Boot 依赖已显式选择。
240
+ - [ ] 阻塞边界与容量证据可复核。
241
+
242
+
243
+ ### spring-batch(源:stacks/spring-batch/spring-batch-job-overlay.md · B02 主挂点)
244
+
245
+ #### Scope
246
+
247
+ 本 Overlay 具体化 Job、Step、重启、分片、元数据和批处理事务边界。
248
+
249
+ #### Rules
250
+
251
+ - 作业参数、实例身份、重启语义和幂等边界必须稳定。
252
+ - 分片、重试、跳过和失败恢复必须有数据一致性证据。
253
+ - 调度系统与 Spring Batch 的职责必须分开记录。
254
+
255
+ #### Checklist
256
+
257
+ - [ ] Java 与 Spring Boot 依赖已显式选择。
258
+ - [ ] 重跑、取消、并发和结果保留策略已验证。
259
+
260
+
261
+ ### tomcat(源:stacks/tomcat/tomcat-runtime-overlay.md · B02 主挂点)
262
+
263
+ #### Scope
264
+
265
+ 本 Overlay 具体化 embedded 与 external Tomcat 的连接器、线程、部署和加固边界。
266
+
267
+ #### Rules
268
+
269
+ - 必须在技术基线中明确 embedded 或 external,以及 JAR 或 WAR。
270
+ - 连接器、代理头、线程和请求限制必须与入口及容量方案一致。
271
+ - 不得把本地启动形态当作生产运行事实。
272
+
273
+ #### Checklist
274
+
275
+ - [ ] Java 依赖已显式选择。
276
+ - [ ] 容器版本、打包、配置来源和运行证据一致。
277
+
278
+
279
+ ### nginx(源:stacks/nginx/nginx-proxy-overlay.md · B02 主挂点)
280
+
281
+ #### Scope
282
+
283
+ 本 Overlay 具体化 TLS 终止、代理头、超时、上传限制和入口路由边界。
284
+
285
+ #### Rules
286
+
287
+ - 必须声明可信代理链、原始客户端地址与协议头的处理方式。
288
+ - 超时、body 限制和缓冲策略必须与应用行为一致。
289
+ - 与 Kubernetes Ingress 并存时必须记录完整入口链路与各自责任。
290
+
291
+ #### Checklist
292
+
293
+ - [ ] 配置语法、路由、TLS 与健康检查有可复核证据。
294
+ - [ ] 默认页、管理面和敏感头未意外暴露。
295
+
296
+
297
+ ### kubernetes-ingress(源:stacks/kubernetes-ingress/kubernetes-ingress-overlay.md · B02 主挂点)
298
+
299
+ #### Scope
300
+
301
+ 本 Overlay 具体化集群入口、Service 路由、TLS、annotation 与健康检查边界。
302
+
303
+ #### Rules
304
+
305
+ - 必须记录实际 Ingress Controller、入口类和可信代理链。
306
+ - annotation 与超时不得依赖未审计的集群默认值。
307
+ - 与 Nginx 并存时必须记录完整入口链路与各自责任。
308
+
309
+ #### Checklist
310
+
311
+ - [ ] manifest、路由、证书和回滚路径可复核。
312
+ - [ ] 控制器特有行为已在项目技术基线中声明。
313
+
314
+
315
+ ### messaging(源:stacks/messaging/messaging-reliability-overlay.md · B02 主挂点)
316
+
317
+ #### Scope
318
+
319
+ 本 Overlay 具体化消息契约、投递、消费、重试、死信与可观测边界。
320
+
321
+ #### Rules
322
+
323
+ - topic、事件 schema、版本、顺序和重复投递语义必须明确。
324
+ - 消费者必须按契约处理幂等、毒消息、重试和死信。
325
+ - 不得把 broker 可用性等同于业务处理成功。
326
+
327
+ #### Checklist
328
+
329
+ - [ ] 生产、消费、补偿和对账证据可关联。
330
+ - [ ] 敏感数据、保留期和权限符合安全与隐私协议。
331
+
@@ -0,0 +1,350 @@
1
+ ---
2
+ seed_source: packages/cli/seeds/aggregation-manifest.json
3
+ seed_source_sha256: 039b637ccffacdfe3ce30d85e193f4b38928fcdfb16efdc4eb255e35e05af91f
4
+ seed_version: B7-THEME
5
+ lane: [frontend]
6
+ status: CURRENT
7
+ authority_scope: mixed_required_and_advisory
8
+ applies_to: [frontend]
9
+ related_evidence_specs: []
10
+ related_tools: []
11
+ legacy_id: theme:internationalization-and-copywriting
12
+ criticality: standard # 聚合注记:来源无 criticality 字段,取中性默认;info 性注记非执行语义
13
+ injection_mode: mixed # 聚合注记:来源无 injection_mode 字段(默认基线 + 任务命中激活模型);info 性注记非执行语义
14
+ stages: [] # 聚合注记:来源无 stages 字段;info 性注记非执行语义
15
+ triggers: [] # 聚合注记:来源无 triggers 字段;info 性注记非执行语义
16
+ requires: [] # 聚合注记:来源 requires 并集(全空)
17
+ x-aggregation: # 聚合来源(D6):逐源 vendor pin(sha256 与卡 vendor_pin 同值)
18
+ - seed_source: pomaster/components/frontend-hard-spec/assets/universal/38-internationalization-protocol.md
19
+ sha256: 68ed4e126042eee191f071786d58983b3b2df94a826a13b50fc52aaa6536c7fa
20
+ seed_version: B6B-2
21
+ - seed_source: pomaster/components/frontend-hard-spec/assets/universal/39-copywriting-protocol.md
22
+ sha256: 5df3a2ddcd1140b2e62dd80f547cf6c0197c44a91ebbdda02ded44bcaefed351
23
+ seed_version: B6B-2
24
+ ---
25
+
26
+ # 国际化与文案
27
+
28
+ > **聚合纪律**:本文档 12 节正文规则行逐字取自 frontmatter x-aggregation 所列来源协议(节内按「端 → 源编号升序」以加粗来源行分块,源内标题与层级原样保留),零新增、零改写、零删除;新增文本仅限文档标题、本注记与逐节来源行。
29
+
30
+ ## Scope
31
+
32
+ **源:FE 38 国际化协议(pomaster/components/frontend-hard-spec/assets/universal/38-internationalization-protocol.md)**
33
+
34
+ P2。定义前端多语言机制:locale 标识与切换、文案外置与 key 命名、ICU MessageFormat、日期/时间/时区/相对时间、数字/货币/百分比/单位、列表/排序/搜索、RTL 与双向文本、文本膨胀与排版、图片/图标/颜色文化适配、翻译工作流与字典管理、SSR hydration 一致性、第三方 SDK / 浏览器原生文案 / 后端错误文案的本地化。
35
+
36
+ **源:FE 39 文案协议(pomaster/components/frontend-hard-spec/assets/universal/39-copywriting-protocol.md)**
37
+
38
+ P2。定义按钮、确认、成功、错误、空态、删除、导入导出和高风险操作文案。
39
+
40
+ ## Non-Scope
41
+
42
+ **源:FE 38 国际化协议**
43
+
44
+ - 不翻译用户数据、不定义业务文案内容质量(语气/术语/voice)—— 见 `39-copywriting-protocol.md`。
45
+ - 不定义金额精度、业务时区、合规区域本身。
46
+ - 不替代 CLDR/Intl API 的实现细节,只规定必须使用的决策、契约和证据。
47
+
48
+ **源:FE 39 文案协议**
49
+
50
+ 不定义业务规则和错误码,不允许文案隐藏系统行为。
51
+
52
+ ## Terms
53
+
54
+ **源:FE 38 国际化协议**
55
+
56
+ - Locale:IETF BCP 47 语言标签(如 `zh-CN`、`en-US`、`ja-JP`、`ar-SA`),决定语言、格式、排序、方向和数字系统。
57
+ - Translation Key:稳定文案标识,不随目标语言变化。
58
+ - Formatter Registry:日期、时间、数字、金额、百分比、币种、单位、枚举和空值显示的唯一策略源。
59
+ - RTL:Right-to-Left 文本方向;LTR:Left-to-Right。
60
+ - ICU MessageFormat:Unicode ICU MessageFormat 2.0,用于复数、select、ordinal、offset 和命名占位符。
61
+
62
+ **源:FE 39 文案协议**
63
+
64
+ - Actionable Copy:说明发生什么、影响什么和下一步的文案。
65
+ - Risk Copy:明确不可逆性、对象和后果的文案。
66
+
67
+ ## MUST
68
+
69
+ **源:FE 38 国际化协议 · §MUST**
70
+
71
+ - 明确支持 locale 列表、默认 locale 和完整回退链(如 `zh-CN` → `zh` → `en-US`)。
72
+ - 使用 IETF BCP 47 语言标签标识 locale;禁止手写 `zh`、`cn`、`en` 等不精确别名。
73
+ - locale 切换后所有已渲染的格式化值同步刷新,不允许旧 locale 残留。
74
+ - URL 路径或子域携带 locale(如 `/zh-CN/dashboard`),或提供可书签化的 Cookie/LocalStorage 回退并由服务端首屏读取。
75
+ - 切换 locale 时不丢失页面状态(query string、hash、表单草稿)。
76
+ - 禁止在模板/组件/脚本中硬编码任何自然语言文本(用户数据除外)。
77
+ - key 使用稳定标识,禁止用中文/英文文案本身作为 key。
78
+ - key 采用命名空间隔离,如 `module:page.section.element` 或扁平点分 `login.form.submit`。
79
+ - 插值占位符使用命名占位符 `{userName}`;禁止用位置占位符 `{0}`。
80
+ - 占位符内容在运行时做 HTML 转义;如需输出 HTML,必须显式标记并经安全审查(XSS 边界,见 `04-security-protocol.md`)。
81
+ - key 删除/改名必须走废弃别名机制,不能直接删除。
82
+ - 复数、性别、状态选择使用 ICU MessageFormat `plural` / `select` / `selectordinal`;禁止用字符串拼接实现。
83
+ - `plural` / `select` / `selectordinal` 必须包含 `other` 分支。
84
+ - 日期、时间、相对时间通过 Formatter Registry 统一输出;禁止页面本地拼接 `YYYY-MM-DD` 或写死 "2 天前"。
85
+ - 存储时间使用 ISO 8601 / UTC;显示时间按用户 locale + 显式时区转换。
86
+ - 使用 `Intl.DateTimeFormat` 时显式传入 `timeZone`;禁止依赖系统时区。
87
+ - 数字、货币、百分比、单位统一通过 Formatter Registry 输出。
88
+ - 货币代码使用 ISO 4217(`CNY`、`USD`、`EUR`);禁止用 `$`、`¥` 符号硬编码。
89
+ - 货币格式化显式指定 `currencyDisplay`(`symbol`/`narrowSymbol`/`code`/`name`)。
90
+ - 小数/千分位分隔符由 CLDR 决定;禁止硬编码 `.` 或 `,`。
91
+ - 百分比与原始数值分离存储,排序/计算用原始值。
92
+ - 列表连接使用 `Intl.ListFormat`;禁止用 `, ` 或 `/` 硬编码。
93
+ - locale-aware 排序使用 `Intl.Collator`;禁止用 `Array.prototype.sort()` 默认字节序。
94
+ - 大小写折叠、搜索归一化使用 locale 感知方法;禁止 `toLowerCase()` 处理非英语搜索。
95
+ - 正则表达式考虑 Unicode 属性(`\p{Letter}`);禁止只用 `[a-zA-Z]`。
96
+ - HTML 根元素 `dir` 与当前 locale 方向一致;RTL locale(ar/he/fa/ur 等)使用 `dir="rtl"`。
97
+ - 使用 CSS logical properties(`margin-inline-start`、`border-inline-end` 等)替代物理方向属性。
98
+ - 镜像布局要素:导航顺序、按钮组、表单标签位置、图标方向(前进/后退、播放/进度条)。
99
+ - 对动态插入的数字/用户生成内容使用 `<bdi>` 或 CSS `unicode-bidi: isolate`。
100
+ - 德语、芬兰语等长文本膨胀系数按 1.3–1.5 预留空间;按钮、表头、标签必须支持换行或截断策略。
101
+ - 所有文案容器定义 `overflow-wrap` / `word-break` 策略;禁止固定宽度导致文字被截断不可读。
102
+ - 图片不得依赖文字传递关键信息;图标必须可本地化或带文本标签。
103
+ - 避免文化敏感符号、颜色、手势、宗教/政治隐喻。
104
+ - 日期/节假日按 locale 显示;禁止硬编码单一文化节日。
105
+ - 度量衡单位按 locale 适配(英里/公里、磅/千克、华氏/摄氏)。
106
+ - 明确 source-of-truth 语言;字典文件版本化并与代码同步发布。
107
+ - 缺失 key 必须回退到 source 语言并标记告警。
108
+ - 翻译平台 API 与 CI 集成;禁止手动复制 JSON 到代码库。
109
+ - 字典文件支持命名空间/代码分割;禁止单个巨型 JSON。
110
+ - SSR 首屏 locale 由服务端根据 URL/Cookie/Header 确定,并在 HTML 中序列化供 hydration。
111
+ - 构建时抽取翻译 key,避免运行时扫描文件系统。
112
+ - hydration 前后 locale 和初始字典一致;禁止服务端用默认 locale、客户端切换导致 mismatch。
113
+ - 后端错误 message 必须映射为前端翻译 key,禁止直接展示后端原始 message。
114
+ - 第三方 SDK/组件的 locale 配置必须显式传入当前 locale,禁止静默使用默认英文。
115
+ - 验证第三方组件的 RTL 支持能力;不支持 RTL 的第三方组件必须评估替代方案或包装隔离。
116
+
117
+ ### 分层责任(按目录层级)
118
+
119
+ 国际化是跨层机制,按目录层级分担责任;层级划分与 `09-module-boundary-protocol` 一致。
120
+
121
+ - **app 层 — locale 入口与切换**:初始化 i18n Provider、默认 locale、回退链、locale 协商策略、URL/Cookie 持久化。MUST NOT 在应用入口硬编码 locale 或把 `navigator.language` 作为唯一业务来源。
122
+ - **platform 层 — 全局 formatter 与字典**:维护 Formatter Registry、全局字典加载/分割、伪本地化、翻译平台同步。MUST NOT 让各页面自行格式化数据或复制组件实现多语言。
123
+ - **api 层 — 后端契约本地化**:错误码映射为翻译 key、货币/单位/时区字段语义对齐、API 响应不携带未本地化的自然语言。MUST NOT 直接展示后端原始 message。
124
+ - **domain 层 — 领域值本地化策略**:金额精度、单位换算、枚举显示、空值/缺省值显示由 domain 决定策略,由 Formatter Registry 执行显示。MUST NOT 在 domain 逻辑中用翻译文本做业务判断。
125
+ - **feature 层 — 页面级 i18n 契约**:页面声明支持的 locale、RTL 需求、key namespace、第三方 SDK locale 矩阵。MUST NOT 页面本地拼接日期/货币/列表格式。
126
+ - **shared 层 — 组件级 i18n 内置**:公共组件内置文案外置、RTL 兼容、logical properties、图标方向翻转、可本地化空态。MUST NOT 组件内部硬编码自然语言或假设 LTR。
127
+
128
+ **源:FE 39 文案协议 · §MUST**
129
+
130
+ - 按钮使用明确动作和对象。
131
+ - 错误说明发生内容、可恢复性和下一步。
132
+ - 空态区分无数据与筛选无结果。
133
+ - 高风险确认明确对象、后果和是否可恢复。
134
+ - 导入导出说明范围、进度、部分成功和结果有效期。
135
+ - 同类操作使用同一名称和语气。
136
+
137
+ ## MUST NOT
138
+
139
+ **源:FE 38 国际化协议 · §MUST NOT**
140
+
141
+ - MUST NOT 各页面自行格式化数据。
142
+ - MUST NOT 用中文/英文标题作为程序 key。
143
+ - MUST NOT 复制组件实现多语言。
144
+ - MUST NOT 将格式化字符串用于计算或排序。
145
+ - MUST NOT 用浏览器 `navigator.language` 作为唯一来源决定业务权限、价格或合规区域。
146
+ - MUST NOT 用中文/英文文案本身作为 key。
147
+ - MUST NOT 用位置占位符 `{0}` / `{1}`。
148
+ - MUST NOT 在源码中直接写 locale-specific 复数分支。
149
+ - MUST NOT 用 `Date.prototype.toLocaleString()` 无参调用。
150
+ - MUST NOT 手动拼接币种和单位符号。
151
+ - MUST NOT 硬编码小数点/千分位分隔符。
152
+ - MUST NOT 用字符串拼接实现复数/选择/序数。
153
+ - MUST NOT 用 `Array.prototype.sort()` 默认字节序做业务排序。
154
+ - MUST NOT 用 `toLowerCase()` / `toUpperCase()` 处理非英语搜索。
155
+ - MUST NOT 用物理方向 CSS(`margin-left/right`)替代 logical properties。
156
+ - MUST NOT 硬编码 `dir="ltr"` 包裹整个应用。
157
+ - MUST NOT 假设源语言(中文)紧凑即所有语言都紧凑。
158
+ - MUST NOT 图片包含不可翻译文字作为关键信息。
159
+ - MUST NOT 硬编码单一文化节日、单位换算或数字系统。
160
+ - MUST NOT 把 UI 文案 key 用作业务逻辑判断(如 `if (t('status') === '已启用')`)。
161
+ - MUST NOT 在源码提交后才发现缺失 key。
162
+ - MUST NOT 在服务端 render 中读取 `window.navigator.language`。
163
+ - MUST NOT 将未本地化的第三方错误文案直接呈现给用户。
164
+
165
+ **源:FE 39 文案协议 · §MUST NOT**
166
+
167
+ - MUST NOT 直接展示后端原始 message 或技术堆栈。
168
+ - MUST NOT 高风险操作只写“确定吗”。
169
+ - MUST NOT 用颜色或感叹号代替清晰说明。
170
+ - MUST NOT 用模糊“操作”“处理”隐藏动作。
171
+
172
+ ## SHOULD
173
+
174
+ **源:FE 38 国际化协议 · §SHOULD**
175
+
176
+ - SHOULD 支持缺失 key 检测和伪本地化。
177
+ - SHOULD 明确存储时区与显示时区。
178
+ - SHOULD 提供 locale 协商:URL > 用户显式选择 > Cookie > `Accept-Language` > 默认。
179
+ - SHOULD 维护 key 命名约定文档 + 禁用词表。
180
+ - SHOULD 提供复数/选择消息的视觉回归测试(阿拉伯语/俄语/波兰语等复杂复数)。
181
+ - SHOULD 在关键业务场景(预约/截止时间)显示时区全名。
182
+ - SHOULD 支持 accounting 格式(负数括号表示)。
183
+ - SHOULD 对关键 UI 文案做 "longest translation" 回归测试。
184
+ - SHOULD 建立可本地化素材清单(illustration/color/icon/photo)。
185
+ - SHOULD 支持 pseudo-localization(伪本地化:lengthening、accents、fake-RTL)做布局回归。
186
+ - SHOULD 在关键错误/空态使用自定义组件替代浏览器原生 `alert()` / `confirm()`。
187
+ - SHOULD 维护第三方 SDK locale/RTL 兼容性矩阵。
188
+
189
+ **源:FE 39 文案协议 · §SHOULD**
190
+
191
+ - SHOULD 简洁、专业、可行动。
192
+ - SHOULD 复用文案模板和错误码映射。
193
+
194
+ ## Contract
195
+
196
+ **源:FE 38 国际化协议 · §Contract**
197
+
198
+ ```text
199
+ Locale, Fallback, KeyNamespace, DateTimePolicy,
200
+ NumberPolicy, CurrencyPolicy, UnitPolicy, EnumPolicy, EmptyPolicy,
201
+ RTLPolicy, PluralPolicy, ListFormatPolicy, CollatorPolicy,
202
+ TranslationWorkflowPolicy, ThirdPartyLocaleMatrix
203
+ ```
204
+
205
+ - `Locale` / `Fallback`:支持的 locale 列表和回退链。
206
+ - `KeyNamespace`:文案 key 的命名空间约定。
207
+ - `DateTimePolicy` / `NumberPolicy` / `CurrencyPolicy` / `UnitPolicy` / `EnumPolicy` / `EmptyPolicy`:Formatter Registry 策略 ID。
208
+ - `RTLPolicy`:RTL locale 列表和布局镜像策略。
209
+ - `PluralPolicy`:ICU MessageFormat 版本和复数分支要求。
210
+ - `ListFormatPolicy` / `CollatorPolicy`:列表连接与排序策略。
211
+ - `TranslationWorkflowPolicy`:source 语言、翻译平台、命名空间拆分、review 策略。
212
+ - `ThirdPartyLocaleMatrix`:第三方 SDK/组件的 locale 与 RTL 兼容性矩阵。
213
+
214
+ ### Formatter Registry
215
+
216
+ `outputs/frontend/10_planned/formatter-registry.yaml` 记录项目级 formatter 策略:
217
+
218
+ ```text
219
+ Category, PolicyId, DefaultValue, UnknownValue, DeprecatedValue,
220
+ Examples, Owner, Version
221
+ ```
222
+
223
+ - Category 至少覆盖 date、time、datetime、number、money、percent、currency、unit、enum、empty。
224
+ - 每个页面或组件必须通过 registry 中声明的 formatter 输出值,禁止本地拼接格式。
225
+
226
+ **源:FE 39 文案协议 · §Contract**
227
+
228
+ ```text
229
+ Scenario, Title, Message, PrimaryAction,
230
+ SecondaryAction, Consequence, Recoverability, TraceDisplay
231
+ ```
232
+
233
+ ## Checklist
234
+
235
+ **源:FE 38 国际化协议 · §Checklist**
236
+
237
+ - [ ] locale 列表、默认 locale、回退链和 locale 协商策略已明确。
238
+ - [ ] 文案外置,无硬编码自然语言;key 使用稳定命名空间标识。
239
+ - [ ] 插值使用命名占位符,HTML 输出经显式标记和安全审查。
240
+ - [ ] ICU MessageFormat 用于复数/性别/状态/序数,且包含 `other` 分支。
241
+ - [ ] 日期/时间/相对时间/数字/货币/百分比/单位通过 Formatter Registry 输出。
242
+ - [ ] 显式时区,不依赖系统时区;UTC 存储,locale 显示。
243
+ - [ ] 列表连接、排序、搜索使用 `Intl.ListFormat` / `Intl.Collator` / locale 感知归一化。
244
+ - [ ] RTL locale 已识别,`dir`、`logical properties`、图标翻转和 `<bdi>` 已处理。
245
+ - [ ] 文本膨胀系数、换行/截断策略、长文案回归已安排。
246
+ - [ ] 图片/图标/颜色/节日/单位/数字系统已做文化适配审查。
247
+ - [ ] source-of-truth 语言、翻译平台、命名空间拆分、review 策略已建立。
248
+ - [ ] SSR 首屏 locale 由服务端确定并序列化;hydration 前后一致。
249
+ - [ ] 后端错误 message 映射为翻译 key;第三方 SDK locale/RTL 矩阵已维护。
250
+ - [ ] 分层国际化责任已按 app/platform/api/domain/feature/shared 分担。
251
+
252
+ **源:FE 39 文案协议 · §Checklist**
253
+
254
+ - [ ] 动作和对象明确。
255
+ - [ ] 风险与恢复清晰。
256
+ - [ ] 同类文案一致。
257
+ - [ ] 无原始技术信息。
258
+
259
+ ## Examples
260
+
261
+ **源:FE 38 国际化协议 · §Examples**
262
+
263
+ ### locale 切换保留 URL state
264
+
265
+ ```text
266
+ 切换前: /zh-CN/dashboard?tab=1#section-a
267
+ 切换后: /en-US/dashboard?tab=1#section-a
268
+ ```
269
+
270
+ ### 命名占位符与 ICU plural
271
+
272
+ ```text
273
+ key: "cart.item_count"
274
+ en-US: "You have {itemCount, number} {itemCount, plural, one {item} other {items}}."
275
+ ar-SA: "لديك {itemCount, number} {itemCount, plural, zero {} one {عنصر} two {عنصرين} few {عناصر} many {عنصرًا} other {عنصر}}."
276
+ ```
277
+
278
+ ### Formatter Registry 统一货币显示
279
+
280
+ ```text
281
+ 原始值: 1234.5
282
+ zh-CN 显示: ¥1,234.50
283
+ en-US 显示: $1,234.50
284
+ de-DE 显示: 1.234,50 EUR
285
+ 排序/计算仍使用原始数值 1234.5
286
+ ```
287
+
288
+ ### RTL 使用 logical properties
289
+
290
+ ```css
291
+ /* 推荐 */
292
+ margin-inline-start: 1rem;
293
+ /* 不推荐 */
294
+ margin-left: 1rem;
295
+ ```
296
+
297
+ ### 后端错误映射为翻译 key
298
+
299
+ ```text
300
+ 后端返回: { "code": "ORDER.OUT_OF_STOCK", "message": "Insufficient inventory" }
301
+ 前端显示: t('error.ORDER.OUT_OF_STOCK') -> "库存不足,无法完成订单。"
302
+ ```
303
+
304
+ **源:FE 39 文案协议 · §Examples**
305
+
306
+ ### 内容示例,可删除
307
+
308
+ “该数据已被其他人更新。请比较最新版本后重新提交。”
309
+
310
+ ## Anti-patterns
311
+
312
+ **源:FE 38 国际化协议 · §Anti-patterns**
313
+
314
+ - 模板拼接币种和单位,切换语言后顺序、间距和小数规则错误。
315
+ - 用 `if (count === 1)` 拼接单复数,阿拉伯语/俄语/波兰语分支错误。
316
+ - 用 `{0}` 位置占位符,翻译调整语序后插值错位。
317
+ - `Date.prototype.toLocaleString()` 无参调用,依赖用户系统时区导致显示不一致。
318
+ - 硬编码 `$` / `¥` 符号,德语、法语显示格式错误。
319
+ - 对格式化后的金额字符串做排序,导致 1000 < 99。
320
+ - 用 `margin-left/right` 物理方向,RTL 布局破裂。
321
+ - 图片包含 "New!" "Sale" 等英文文字,未做本地化即上线。
322
+ - 硬编码春节/圣诞作为默认节日,其他 locale 用户困惑。
323
+ - 后端错误 message 直接展示给用户,暴露内部术语或英文。
324
+ - SSR 服务端用默认 locale 渲染,客户端 hydration 后闪烁切换。
325
+
326
+ **源:FE 39 文案协议 · §Anti-patterns**
327
+
328
+ 系统异常只显示“失败!”,用户不知道对象、原因或下一步。
329
+
330
+ ## Ownership
331
+
332
+ **源:FE 38 国际化协议 · §Ownership**
333
+
334
+ 产品/内容 Owner 维护语言范围和文化适配清单,i18n Owner 维护工具、key、Formatter Registry 和翻译工作流,领域 Owner 维护枚举语义和后端错误码映射,前端架构 Owner 维护 locale 切换、SSR hydration 和第三方 SDK 矩阵。
335
+
336
+ **源:FE 39 文案协议 · §Ownership**
337
+
338
+ 内容/产品 Owner 维护语气,领域 Owner 确认语义,前端负责正确映射。
339
+
340
+ ## Change Policy
341
+
342
+ **源:FE 38 国际化协议 · §Change Policy**
343
+
344
+ Key 改名先提供别名或迁移;新增 locale 必须补资源、格式、布局回归和 RTL 测试。Formatter Registry 策略变化须评估所有页面/组件影响;第三方 SDK locale/RTL 兼容性矩阵随 SDK 版本更新而更新。
345
+
346
+ **源:FE 39 文案协议 · §Change Policy**
347
+
348
+ 公共文案模板变化需评估全部场景;业务术语变化同步 i18n 和帮助内容。
349
+
350
+ > **语言节**:本主题无语言节挂点(缺席诚实);规则本体即上文通用节。