pomaster 0.3.0 → 0.4.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 (393) hide show
  1. package/README.md +9 -10
  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 +92 -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 +92 -0
  132. package/catalog/policies/policy.sec.third_party_execution_register.json +2 -1
  133. package/catalog/policies/policy.sec.trust_boundary_enforcement.json +93 -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 +23026 -16635
  240. package/package.json +2 -1
  241. package/seeds/baseline/backend/api-contract.md +26 -0
  242. package/seeds/baseline/backend/architecture.md +31 -0
  243. package/seeds/baseline/backend/data-access.md +31 -0
  244. package/seeds/baseline/backend/directory-structure.md +11 -0
  245. package/seeds/baseline/backend/integration-runtime.md +21 -0
  246. package/seeds/baseline/backend/quality.md +31 -0
  247. package/seeds/baseline/backend/stack.yaml +13 -0
  248. package/seeds/baseline/backend/transaction-concurrency.md +26 -0
  249. package/seeds/baseline/data/lineage.md +11 -0
  250. package/seeds/baseline/data/migration.md +11 -0
  251. package/seeds/baseline/data/model.md +31 -0
  252. package/seeds/baseline/data/precision-units.md +31 -0
  253. package/seeds/baseline/data/quality.md +31 -0
  254. package/seeds/baseline/frontend/api-and-error.md +21 -0
  255. package/seeds/baseline/frontend/architecture.md +26 -0
  256. package/seeds/baseline/frontend/design-system.md +21 -0
  257. package/seeds/baseline/frontend/directory-structure.md +16 -0
  258. package/seeds/baseline/frontend/quality.md +26 -0
  259. package/seeds/baseline/frontend/stack.yaml +17 -0
  260. package/seeds/baseline/frontend/state-and-data.md +26 -0
  261. package/seeds/baseline/manifest.yaml +32 -0
  262. package/seeds/baseline/platform/delivery.md +36 -0
  263. package/seeds/baseline/platform/environment.md +11 -0
  264. package/seeds/baseline/platform/observability.md +31 -0
  265. package/seeds/baseline/platform/security.md +26 -0
  266. package/seeds/manifest.json +2006 -0
  267. package/seeds/specs/evidence/accessibility.md +89 -0
  268. package/seeds/specs/evidence/architecture.md +89 -0
  269. package/seeds/specs/evidence/browser-e2e.md +91 -0
  270. package/seeds/specs/evidence/build.md +91 -0
  271. package/seeds/specs/evidence/business-acceptance.md +89 -0
  272. package/seeds/specs/evidence/complexity-crap.md +97 -0
  273. package/seeds/specs/evidence/contract.md +89 -0
  274. package/seeds/specs/evidence/coverage.md +91 -0
  275. package/seeds/specs/evidence/data-migration.md +91 -0
  276. package/seeds/specs/evidence/dead-code-duplicate.md +89 -0
  277. package/seeds/specs/evidence/dependency-supply-chain.md +89 -0
  278. package/seeds/specs/evidence/index.md +55 -0
  279. package/seeds/specs/evidence/mutation.md +89 -0
  280. package/seeds/specs/evidence/performance.md +89 -0
  281. package/seeds/specs/evidence/release.md +91 -0
  282. package/seeds/specs/evidence/runtime-observability.md +91 -0
  283. package/seeds/specs/evidence/security.md +89 -0
  284. package/seeds/specs/evidence/typecheck-lint.md +91 -0
  285. package/seeds/specs/evidence/unit-component-integration.md +91 -0
  286. package/seeds/specs/evidence/visual-regression.md +89 -0
  287. package/seeds/specs/hard/backend/01-architecture-governance-protocol.md +68 -0
  288. package/seeds/specs/hard/backend/02-project-structure-governance-protocol.md +68 -0
  289. package/seeds/specs/hard/backend/03-directory-boundary-protocol.md +68 -0
  290. package/seeds/specs/hard/backend/04-layering-architecture-protocol.md +68 -0
  291. package/seeds/specs/hard/backend/05-task-workflow-protocol.md +68 -0
  292. package/seeds/specs/hard/backend/06-ai-generated-code-protocol.md +68 -0
  293. package/seeds/specs/hard/backend/07-evidence-acceptance-protocol.md +68 -0
  294. package/seeds/specs/hard/backend/08-contract-change-protocol.md +68 -0
  295. package/seeds/specs/hard/backend/09-role-responsibility-protocol.md +68 -0
  296. package/seeds/specs/hard/backend/10-security-protocol.md +68 -0
  297. package/seeds/specs/hard/backend/11-environment-configuration-protocol.md +67 -0
  298. package/seeds/specs/hard/backend/12-api-contract-protocol.md +68 -0
  299. package/seeds/specs/hard/backend/13-privacy-data-lifecycle-protocol.md +68 -0
  300. package/seeds/specs/hard/backend/14-business-rules-state-protocol.md +68 -0
  301. package/seeds/specs/hard/backend/15-data-model-protocol.md +68 -0
  302. package/seeds/specs/hard/backend/16-error-code-protocol.md +68 -0
  303. package/seeds/specs/hard/backend/17-permission-authorization-protocol.md +68 -0
  304. package/seeds/specs/hard/backend/18-database-schema-migration-protocol.md +68 -0
  305. package/seeds/specs/hard/backend/19-query-index-sql-protocol.md +68 -0
  306. package/seeds/specs/hard/backend/20-transaction-boundary-protocol.md +68 -0
  307. package/seeds/specs/hard/backend/21-concurrency-locking-protocol.md +68 -0
  308. package/seeds/specs/hard/backend/22-idempotency-protocol.md +68 -0
  309. package/seeds/specs/hard/backend/23-cache-redis-consistency-protocol.md +68 -0
  310. package/seeds/specs/hard/backend/24-external-integration-resilience-protocol.md +68 -0
  311. package/seeds/specs/hard/backend/25-async-job-scheduler-protocol.md +68 -0
  312. package/seeds/specs/hard/backend/26-engineering-tooling-protocol.md +68 -0
  313. package/seeds/specs/hard/backend/27-dependency-supply-chain-protocol.md +68 -0
  314. package/seeds/specs/hard/backend/28-testing-protocol.md +68 -0
  315. package/seeds/specs/hard/backend/29-observability-logging-tracing-protocol.md +68 -0
  316. package/seeds/specs/hard/backend/30-performance-capacity-protocol.md +68 -0
  317. package/seeds/specs/hard/backend/31-runtime-deployment-protocol.md +68 -0
  318. package/seeds/specs/hard/backend/32-release-versioning-rollback-protocol.md +68 -0
  319. package/seeds/specs/hard/backend/index.md +177 -0
  320. package/seeds/specs/hard/frontend/01-development-checklist-protocol.md +86 -0
  321. package/seeds/specs/hard/frontend/02-ai-generated-code-protocol.md +82 -0
  322. package/seeds/specs/hard/frontend/03-acceptance-gate-protocol.md +86 -0
  323. package/seeds/specs/hard/frontend/04-security-protocol.md +283 -0
  324. package/seeds/specs/hard/frontend/05-environment-configuration-protocol.md +80 -0
  325. package/seeds/specs/hard/frontend/06-change-governance-protocol.md +90 -0
  326. package/seeds/specs/hard/frontend/07-frontend-backend-communication-protocol.md +219 -0
  327. package/seeds/specs/hard/frontend/08-role-responsibility-protocol.md +80 -0
  328. package/seeds/specs/hard/frontend/09-module-boundary-protocol.md +81 -0
  329. package/seeds/specs/hard/frontend/10-engineering-tooling-protocol.md +89 -0
  330. package/seeds/specs/hard/frontend/11-dependency-package-management-protocol.md +87 -0
  331. package/seeds/specs/hard/frontend/12-business-rules-protocol.md +79 -0
  332. package/seeds/specs/hard/frontend/13-monetary-precision-protocol.md +81 -0
  333. package/seeds/specs/hard/frontend/14-data-model-protocol.md +85 -0
  334. package/seeds/specs/hard/frontend/15-request-api-protocol.md +87 -0
  335. package/seeds/specs/hard/frontend/16-error-handling-protocol.md +79 -0
  336. package/seeds/specs/hard/frontend/17-permission-protocol.md +79 -0
  337. package/seeds/specs/hard/frontend/18-state-management-protocol.md +88 -0
  338. package/seeds/specs/hard/frontend/19-cache-protocol.md +79 -0
  339. package/seeds/specs/hard/frontend/20-testing-protocol.md +88 -0
  340. package/seeds/specs/hard/frontend/21-design-system-protocol.md +79 -0
  341. package/seeds/specs/hard/frontend/22-theme-protocol.md +79 -0
  342. package/seeds/specs/hard/frontend/23-accessibility-protocol.md +189 -0
  343. package/seeds/specs/hard/frontend/24-component-protocol.md +80 -0
  344. package/seeds/specs/hard/frontend/25-page-structure-protocol.md +79 -0
  345. package/seeds/specs/hard/frontend/26-style-layout-protocol.md +80 -0
  346. package/seeds/specs/hard/frontend/27-rendering-state-protocol.md +81 -0
  347. package/seeds/specs/hard/frontend/28-form-protocol.md +88 -0
  348. package/seeds/specs/hard/frontend/29-routing-url-protocol.md +79 -0
  349. package/seeds/specs/hard/frontend/30-data-grid-protocol.md +83 -0
  350. package/seeds/specs/hard/frontend/31-performance-protocol.md +137 -0
  351. package/seeds/specs/hard/frontend/32-file-import-export-protocol.md +80 -0
  352. package/seeds/specs/hard/frontend/33-release-versioning-protocol.md +79 -0
  353. package/seeds/specs/hard/frontend/34-monitoring-logging-protocol.md +128 -0
  354. package/seeds/specs/hard/frontend/35-mock-protocol.md +97 -0
  355. package/seeds/specs/hard/frontend/36-feature-flag-protocol.md +79 -0
  356. package/seeds/specs/hard/frontend/37-browser-device-compatibility-protocol.md +83 -0
  357. package/seeds/specs/hard/frontend/38-internationalization-protocol.md +243 -0
  358. package/seeds/specs/hard/frontend/39-copywriting-protocol.md +79 -0
  359. package/seeds/specs/hard/frontend/40-analytics-protocol.md +98 -0
  360. package/seeds/specs/hard/frontend/41-design-handoff-protocol.md +80 -0
  361. package/seeds/specs/hard/frontend/42-browser-runtime-lifecycle-protocol.md +86 -0
  362. package/seeds/specs/hard/frontend/43-time-temporal-protocol.md +86 -0
  363. package/seeds/specs/hard/frontend/44-privacy-data-lifecycle-protocol.md +87 -0
  364. package/seeds/specs/hard/frontend/45-browser-storage-protocol.md +87 -0
  365. package/seeds/specs/hard/frontend/index.md +308 -0
  366. package/seeds/specs/hard/stacks/java/index.md +20 -0
  367. package/seeds/specs/hard/stacks/java/java-language-overlay.md +35 -0
  368. package/seeds/specs/hard/stacks/jpa/index.md +20 -0
  369. package/seeds/specs/hard/stacks/jpa/jpa-persistence-overlay.md +35 -0
  370. package/seeds/specs/hard/stacks/kubernetes-ingress/index.md +20 -0
  371. package/seeds/specs/hard/stacks/kubernetes-ingress/kubernetes-ingress-overlay.md +35 -0
  372. package/seeds/specs/hard/stacks/messaging/index.md +20 -0
  373. package/seeds/specs/hard/stacks/messaging/messaging-reliability-overlay.md +35 -0
  374. package/seeds/specs/hard/stacks/mybatis/index.md +20 -0
  375. package/seeds/specs/hard/stacks/mybatis/mybatis-persistence-overlay.md +35 -0
  376. package/seeds/specs/hard/stacks/mysql/index.md +20 -0
  377. package/seeds/specs/hard/stacks/mysql/mysql-database-overlay.md +35 -0
  378. package/seeds/specs/hard/stacks/nginx/index.md +20 -0
  379. package/seeds/specs/hard/stacks/nginx/nginx-proxy-overlay.md +35 -0
  380. package/seeds/specs/hard/stacks/postgresql/index.md +20 -0
  381. package/seeds/specs/hard/stacks/postgresql/postgresql-database-overlay.md +35 -0
  382. package/seeds/specs/hard/stacks/redis/index.md +20 -0
  383. package/seeds/specs/hard/stacks/redis/redis-cache-overlay.md +35 -0
  384. package/seeds/specs/hard/stacks/spring-batch/index.md +20 -0
  385. package/seeds/specs/hard/stacks/spring-batch/spring-batch-job-overlay.md +35 -0
  386. package/seeds/specs/hard/stacks/spring-boot/index.md +20 -0
  387. package/seeds/specs/hard/stacks/spring-boot/spring-boot-application-overlay.md +35 -0
  388. package/seeds/specs/hard/stacks/spring-mvc/index.md +20 -0
  389. package/seeds/specs/hard/stacks/spring-mvc/spring-mvc-web-overlay.md +35 -0
  390. package/seeds/specs/hard/stacks/spring-webflux/index.md +20 -0
  391. package/seeds/specs/hard/stacks/spring-webflux/spring-webflux-reactive-overlay.md +35 -0
  392. package/seeds/specs/hard/stacks/tomcat/index.md +20 -0
  393. package/seeds/specs/hard/stacks/tomcat/tomcat-runtime-overlay.md +35 -0
@@ -0,0 +1,97 @@
1
+ ---
2
+ seed_source: pomaster/components/frontend-hard-spec/assets/universal/35-mock-protocol.md
3
+ seed_source_sha256: c9288fe227cb26633d23c5d0e2e710b9cde716371f66cf3157c63b3ec8a58342
4
+ seed_version: B6B-2
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
+ ---
12
+
13
+ # 35 Mock 协议
14
+
15
+ ## Scope
16
+
17
+ P2。定义后端未就绪或测试时的 Mock 来源、场景、契约校验和启停。
18
+
19
+ ## Non-Scope
20
+
21
+ Mock 不定义正式业务规则,不替代接口契约和真实集成测试。
22
+
23
+ ## Terms
24
+
25
+ - Fixture:稳定可复用的测试数据。
26
+ - Scenario:success、empty、error、timeout 等受控响应模式。
27
+ - Contract Mock:由正式 schema 生成或校验的 Mock。
28
+
29
+ ## MUST
30
+
31
+ - Mock 字段符合正式接口契约。
32
+ - Mock schema 必须与正式 OpenAPI 或等价契约保持一致;漂移必须被 CI 检测并阻断。
33
+ - 覆盖 success、empty、large、slow、timeout、permission、conflict、error 和 partial success。
34
+ - Fixture 使用稳定 id、时间和有种子的生成器。
35
+ - Mock 通过统一环境开关启停,生产默认关闭。
36
+ - 临时 Mock 必须记录 contract_version、到期日(expires_at)和替换状态(active/deprecated/removed)。
37
+ - 真实接口接入后保留测试 Mock 并删除临时错误结构。
38
+
39
+ ## MUST NOT
40
+
41
+ - MUST NOT 只 Mock 成功小数据。
42
+ - MUST NOT 用 Mock 推导正式字段和规则。
43
+ - MUST NOT 在业务组件写 Mock 分支。
44
+ - MUST NOT 生产默认启用 Mock。
45
+
46
+ ## SHOULD
47
+
48
+ - SHOULD 由契约生成类型和基础场景。
49
+ - SHOULD 模拟幂等、409、429、断线和任务状态。
50
+ - SHOULD 在 `outputs/frontend/10_planned/mock-contract.yaml` 中维护场景清单与契约版本绑定。
51
+
52
+ ## Contract
53
+
54
+ ```text
55
+ Endpoint, ScenarioId, RequestMatch, ResponseSchema,
56
+ Delay, Error, FixtureSeed, ContractVersion
57
+ ```
58
+
59
+ ### Mock 生命周期
60
+
61
+ `outputs/frontend/10_planned/mock-contract.yaml` 记录每个 Mock 场景:
62
+
63
+ ```text
64
+ Endpoint, ScenarioId, ContractVersion, Status,
65
+ ExpiresAt, ReplacementEndpoint, OpenapiDiffChecked
66
+ ```
67
+
68
+ - 临时 Mock 必须有到期日;到期前必须完成真实接口替换或显式延期。
69
+ - 每个场景必须通过 OpenAPI diff 检查;漂移项必须阻塞合并。
70
+
71
+ ## Checklist
72
+
73
+ - [ ] 契约一致。
74
+ - [ ] OpenAPI/契约漂移检查通过。
75
+ - [ ] 非理想态完整。
76
+ - [ ] 数据稳定可重复。
77
+ - [ ] 生产安全关闭。
78
+ - [ ] 临时 Mock 有到期日和替换状态。
79
+ - [ ] mock-contract.yaml 已维护。
80
+
81
+ ## Examples
82
+
83
+ ### 内容示例,可删除
84
+
85
+ 同一接口提供 normal、empty、409 和 slow 场景,组件测试通过 scenario id 切换。
86
+
87
+ ## Anti-patterns
88
+
89
+ 页面内写死假数组,字段与后端完全不同,联调时才重写页面。
90
+
91
+ ## Ownership
92
+
93
+ 契约 Owner 负责 schema,前端/QA 维护场景,平台 Owner 维护启停基础设施。
94
+
95
+ ## Change Policy
96
+
97
+ 契约变化必须同步 Mock;删除场景前确认无测试依赖。
@@ -0,0 +1,79 @@
1
+ ---
2
+ seed_source: pomaster/components/frontend-hard-spec/assets/universal/36-feature-flag-protocol.md
3
+ seed_source_sha256: ba6cf2d5607ba54d9864cd6c07899d2e13a8d33ea248fbd7469b92c23474f474
4
+ seed_version: B6B-2
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
+ ---
12
+
13
+ # 36 Feature Flag 协议
14
+
15
+ ## Scope
16
+
17
+ P2。定义功能开关来源、命名、灰度范围、关闭表现、默认值和生命周期。
18
+
19
+ ## Non-Scope
20
+
21
+ 不替代权限、业务状态和环境配置。
22
+
23
+ ## Terms
24
+
25
+ - Flag Key:稳定唯一的开关键。
26
+ - Targeting:按环境、用户、角色或组织控制命中。
27
+ - Kill Switch:紧急关闭新能力的开关。
28
+
29
+ ## MUST
30
+
31
+ - 每个 flag 有 owner、目的、默认值、目标范围、期限和清理日期。
32
+ - 入口、路由和后台请求在关闭时一致停用。
33
+ - 获取失败使用保守默认值。
34
+ - Flag 与权限同时通过才允许操作。
35
+ - 全量稳定后删除临时判断和旧路径。
36
+
37
+ ## MUST NOT
38
+
39
+ - MUST NOT 在多个页面手写同一判断。
40
+ - MUST NOT 将 flag 当权限或业务状态。
41
+ - MUST NOT 使用无 owner、无期限的永久临时 flag。
42
+ - MUST NOT 关闭 UI 却继续触发后台请求。
43
+
44
+ ## SHOULD
45
+
46
+ - SHOULD 支持灰度、回滚、监控和实验审计。
47
+ - SHOULD 对关键写操作提供 kill switch。
48
+
49
+ ## Contract
50
+
51
+ ```text
52
+ FlagKey, Owner, Default, Targeting, Fallback,
53
+ StartAt, EndAt, CleanupAt, Metrics
54
+ ```
55
+
56
+ ## Checklist
57
+
58
+ - [ ] 默认和失败行为安全。
59
+ - [ ] UI/路由/请求一致。
60
+ - [ ] 不绕过权限。
61
+ - [ ] 有清理日期。
62
+
63
+ ## Examples
64
+
65
+ ### 内容示例,可删除
66
+
67
+ 新编辑器 flag 关闭后回到旧编辑器,相关新 API 不再调用。
68
+
69
+ ## Anti-patterns
70
+
71
+ 组件中散落环境判断,开关关闭后深链接仍能访问新功能。
72
+
73
+ ## Ownership
74
+
75
+ 功能 Owner 维护业务生命周期,平台 Owner 维护系统,安全/权限 Owner 审查边界。
76
+
77
+ ## Change Policy
78
+
79
+ Flag 语义和目标规则变化必须记录;转长期配置时迁移到正式配置系统。
@@ -0,0 +1,83 @@
1
+ ---
2
+ seed_source: pomaster/components/frontend-hard-spec/assets/universal/37-browser-device-compatibility-protocol.md
3
+ seed_source_sha256: 81c0d4bf8996f6cf6b38d1c8514385065785728011222b524d73d8135703a3b3
4
+ seed_version: B6B-2
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
+ ---
12
+
13
+ # 37 浏览器与设备兼容协议
14
+
15
+ ## Scope
16
+
17
+ P2。定义支持浏览器、设备、分辨率、缩放、输入方式和不支持环境提示。
18
+
19
+ ## Non-Scope
20
+
21
+ 不要求所有项目支持移动端或旧浏览器,不替代响应式布局协议。
22
+
23
+ ## Terms
24
+
25
+ - Support Matrix:正式支持并测试的环境组合。
26
+ - Graceful Degradation:能力不足时的安全降级。
27
+ - Unsupported Environment:明确不提供质量承诺的环境。
28
+
29
+ ## MUST
30
+
31
+ - 明确浏览器及最低版本、操作系统、设备和输入方式。
32
+ - 明确关键分辨率和 100%/125%/150% 等缩放矩阵。
33
+ - 关键流程在所有支持组合验证。
34
+ - 不支持环境提供可操作说明或安全降级。
35
+ - 使用能力检测而非脆弱 user-agent 业务判断。
36
+ - 支持矩阵必须覆盖关键 Web API 能力与约束,包括存储、权限、Worker、文件/媒体能力和长连接;能力缺失或被策略禁用时提供可测试降级。
37
+ - 页面必须兼容 `pagehide` / `pageshow`、可见性变化和 bfcache 恢复;恢复后重新校验连接、缓存、权限与数据新鲜度。
38
+
39
+ ## MUST NOT
40
+
41
+ - MUST NOT 只在开发者默认环境验收。
42
+ - MUST NOT 未测试就宣称支持。
43
+ - MUST NOT 用缩小字体解决小屏。
44
+ - MUST NOT 为旧环境引入无人维护的大型 polyfill。
45
+ - MUST NOT 使用 `unload` 作为保存或清理的可靠信号;`beforeunload` 仅在存在未保存用户输入时按需注册并及时移除。
46
+
47
+ ## SHOULD
48
+
49
+ - SHOULD 优先支持组织真实使用环境。
50
+ - SHOULD 自动运行代表性兼容测试。
51
+
52
+ ## Contract
53
+
54
+ ```text
55
+ Browser, MinVersion, OS, Device, Viewport,
56
+ Zoom, Input, SupportLevel, TestEvidence
57
+ ```
58
+
59
+ ## Checklist
60
+
61
+ - [ ] 支持矩阵明确。
62
+ - [ ] 关键视口与缩放通过。
63
+ - [ ] 不支持提示可用。
64
+ - [ ] polyfill 风险已评估。
65
+ - [ ] 生命周期/bfcache 恢复通过,关键能力降级可验证。
66
+
67
+ ## Examples
68
+
69
+ ### 内容示例,可删除
70
+
71
+ 企业桌面项目明确支持受管 Chrome/Edge 版本和关键办公分辨率,不含手机 Safari。
72
+
73
+ ## Anti-patterns
74
+
75
+ 只在 1920×1080@100% 测试,1366 笔记本上按钮和表格互相遮挡。
76
+
77
+ ## Ownership
78
+
79
+ 产品 Owner 定义范围,前端/QA 维护矩阵,平台 Owner 维护构建目标。
80
+
81
+ ## Change Policy
82
+
83
+ 增加或停止支持环境必须公告、更新构建与测试,并提供升级路径。
@@ -0,0 +1,243 @@
1
+ ---
2
+ seed_source: pomaster/components/frontend-hard-spec/assets/universal/38-internationalization-protocol.md
3
+ seed_source_sha256: 68ed4e126042eee191f071786d58983b3b2df94a826a13b50fc52aaa6536c7fa
4
+ seed_version: B6B-2
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
+ ---
12
+
13
+ # 38 国际化协议
14
+
15
+ ## Scope
16
+
17
+ P2。定义前端多语言机制:locale 标识与切换、文案外置与 key 命名、ICU MessageFormat、日期/时间/时区/相对时间、数字/货币/百分比/单位、列表/排序/搜索、RTL 与双向文本、文本膨胀与排版、图片/图标/颜色文化适配、翻译工作流与字典管理、SSR hydration 一致性、第三方 SDK / 浏览器原生文案 / 后端错误文案的本地化。
18
+
19
+ ## Non-Scope
20
+
21
+ - 不翻译用户数据、不定义业务文案内容质量(语气/术语/voice)—— 见 `39-copywriting-protocol.md`。
22
+ - 不定义金额精度、业务时区、合规区域本身。
23
+ - 不替代 CLDR/Intl API 的实现细节,只规定必须使用的决策、契约和证据。
24
+
25
+ ## Terms
26
+
27
+ - Locale:IETF BCP 47 语言标签(如 `zh-CN`、`en-US`、`ja-JP`、`ar-SA`),决定语言、格式、排序、方向和数字系统。
28
+ - Translation Key:稳定文案标识,不随目标语言变化。
29
+ - Formatter Registry:日期、时间、数字、金额、百分比、币种、单位、枚举和空值显示的唯一策略源。
30
+ - RTL:Right-to-Left 文本方向;LTR:Left-to-Right。
31
+ - ICU MessageFormat:Unicode ICU MessageFormat 2.0,用于复数、select、ordinal、offset 和命名占位符。
32
+
33
+ ## MUST
34
+
35
+ - 明确支持 locale 列表、默认 locale 和完整回退链(如 `zh-CN` → `zh` → `en-US`)。
36
+ - 使用 IETF BCP 47 语言标签标识 locale;禁止手写 `zh`、`cn`、`en` 等不精确别名。
37
+ - locale 切换后所有已渲染的格式化值同步刷新,不允许旧 locale 残留。
38
+ - URL 路径或子域携带 locale(如 `/zh-CN/dashboard`),或提供可书签化的 Cookie/LocalStorage 回退并由服务端首屏读取。
39
+ - 切换 locale 时不丢失页面状态(query string、hash、表单草稿)。
40
+ - 禁止在模板/组件/脚本中硬编码任何自然语言文本(用户数据除外)。
41
+ - key 使用稳定标识,禁止用中文/英文文案本身作为 key。
42
+ - key 采用命名空间隔离,如 `module:page.section.element` 或扁平点分 `login.form.submit`。
43
+ - 插值占位符使用命名占位符 `{userName}`;禁止用位置占位符 `{0}`。
44
+ - 占位符内容在运行时做 HTML 转义;如需输出 HTML,必须显式标记并经安全审查(XSS 边界,见 `04-security-protocol.md`)。
45
+ - key 删除/改名必须走废弃别名机制,不能直接删除。
46
+ - 复数、性别、状态选择使用 ICU MessageFormat `plural` / `select` / `selectordinal`;禁止用字符串拼接实现。
47
+ - `plural` / `select` / `selectordinal` 必须包含 `other` 分支。
48
+ - 日期、时间、相对时间通过 Formatter Registry 统一输出;禁止页面本地拼接 `YYYY-MM-DD` 或写死 "2 天前"。
49
+ - 存储时间使用 ISO 8601 / UTC;显示时间按用户 locale + 显式时区转换。
50
+ - 使用 `Intl.DateTimeFormat` 时显式传入 `timeZone`;禁止依赖系统时区。
51
+ - 数字、货币、百分比、单位统一通过 Formatter Registry 输出。
52
+ - 货币代码使用 ISO 4217(`CNY`、`USD`、`EUR`);禁止用 `$`、`¥` 符号硬编码。
53
+ - 货币格式化显式指定 `currencyDisplay`(`symbol`/`narrowSymbol`/`code`/`name`)。
54
+ - 小数/千分位分隔符由 CLDR 决定;禁止硬编码 `.` 或 `,`。
55
+ - 百分比与原始数值分离存储,排序/计算用原始值。
56
+ - 列表连接使用 `Intl.ListFormat`;禁止用 `, ` 或 `/` 硬编码。
57
+ - locale-aware 排序使用 `Intl.Collator`;禁止用 `Array.prototype.sort()` 默认字节序。
58
+ - 大小写折叠、搜索归一化使用 locale 感知方法;禁止 `toLowerCase()` 处理非英语搜索。
59
+ - 正则表达式考虑 Unicode 属性(`\p{Letter}`);禁止只用 `[a-zA-Z]`。
60
+ - HTML 根元素 `dir` 与当前 locale 方向一致;RTL locale(ar/he/fa/ur 等)使用 `dir="rtl"`。
61
+ - 使用 CSS logical properties(`margin-inline-start`、`border-inline-end` 等)替代物理方向属性。
62
+ - 镜像布局要素:导航顺序、按钮组、表单标签位置、图标方向(前进/后退、播放/进度条)。
63
+ - 对动态插入的数字/用户生成内容使用 `<bdi>` 或 CSS `unicode-bidi: isolate`。
64
+ - 德语、芬兰语等长文本膨胀系数按 1.3–1.5 预留空间;按钮、表头、标签必须支持换行或截断策略。
65
+ - 所有文案容器定义 `overflow-wrap` / `word-break` 策略;禁止固定宽度导致文字被截断不可读。
66
+ - 图片不得依赖文字传递关键信息;图标必须可本地化或带文本标签。
67
+ - 避免文化敏感符号、颜色、手势、宗教/政治隐喻。
68
+ - 日期/节假日按 locale 显示;禁止硬编码单一文化节日。
69
+ - 度量衡单位按 locale 适配(英里/公里、磅/千克、华氏/摄氏)。
70
+ - 明确 source-of-truth 语言;字典文件版本化并与代码同步发布。
71
+ - 缺失 key 必须回退到 source 语言并标记告警。
72
+ - 翻译平台 API 与 CI 集成;禁止手动复制 JSON 到代码库。
73
+ - 字典文件支持命名空间/代码分割;禁止单个巨型 JSON。
74
+ - SSR 首屏 locale 由服务端根据 URL/Cookie/Header 确定,并在 HTML 中序列化供 hydration。
75
+ - 构建时抽取翻译 key,避免运行时扫描文件系统。
76
+ - hydration 前后 locale 和初始字典一致;禁止服务端用默认 locale、客户端切换导致 mismatch。
77
+ - 后端错误 message 必须映射为前端翻译 key,禁止直接展示后端原始 message。
78
+ - 第三方 SDK/组件的 locale 配置必须显式传入当前 locale,禁止静默使用默认英文。
79
+ - 验证第三方组件的 RTL 支持能力;不支持 RTL 的第三方组件必须评估替代方案或包装隔离。
80
+
81
+ ### 分层责任(按目录层级)
82
+
83
+ 国际化是跨层机制,按目录层级分担责任;层级划分与 `09-module-boundary-protocol` 一致。
84
+
85
+ - **app 层 — locale 入口与切换**:初始化 i18n Provider、默认 locale、回退链、locale 协商策略、URL/Cookie 持久化。MUST NOT 在应用入口硬编码 locale 或把 `navigator.language` 作为唯一业务来源。
86
+ - **platform 层 — 全局 formatter 与字典**:维护 Formatter Registry、全局字典加载/分割、伪本地化、翻译平台同步。MUST NOT 让各页面自行格式化数据或复制组件实现多语言。
87
+ - **api 层 — 后端契约本地化**:错误码映射为翻译 key、货币/单位/时区字段语义对齐、API 响应不携带未本地化的自然语言。MUST NOT 直接展示后端原始 message。
88
+ - **domain 层 — 领域值本地化策略**:金额精度、单位换算、枚举显示、空值/缺省值显示由 domain 决定策略,由 Formatter Registry 执行显示。MUST NOT 在 domain 逻辑中用翻译文本做业务判断。
89
+ - **feature 层 — 页面级 i18n 契约**:页面声明支持的 locale、RTL 需求、key namespace、第三方 SDK locale 矩阵。MUST NOT 页面本地拼接日期/货币/列表格式。
90
+ - **shared 层 — 组件级 i18n 内置**:公共组件内置文案外置、RTL 兼容、logical properties、图标方向翻转、可本地化空态。MUST NOT 组件内部硬编码自然语言或假设 LTR。
91
+
92
+ ## MUST NOT
93
+
94
+ - MUST NOT 各页面自行格式化数据。
95
+ - MUST NOT 用中文/英文标题作为程序 key。
96
+ - MUST NOT 复制组件实现多语言。
97
+ - MUST NOT 将格式化字符串用于计算或排序。
98
+ - MUST NOT 用浏览器 `navigator.language` 作为唯一来源决定业务权限、价格或合规区域。
99
+ - MUST NOT 用中文/英文文案本身作为 key。
100
+ - MUST NOT 用位置占位符 `{0}` / `{1}`。
101
+ - MUST NOT 在源码中直接写 locale-specific 复数分支。
102
+ - MUST NOT 用 `Date.prototype.toLocaleString()` 无参调用。
103
+ - MUST NOT 手动拼接币种和单位符号。
104
+ - MUST NOT 硬编码小数点/千分位分隔符。
105
+ - MUST NOT 用字符串拼接实现复数/选择/序数。
106
+ - MUST NOT 用 `Array.prototype.sort()` 默认字节序做业务排序。
107
+ - MUST NOT 用 `toLowerCase()` / `toUpperCase()` 处理非英语搜索。
108
+ - MUST NOT 用物理方向 CSS(`margin-left/right`)替代 logical properties。
109
+ - MUST NOT 硬编码 `dir="ltr"` 包裹整个应用。
110
+ - MUST NOT 假设源语言(中文)紧凑即所有语言都紧凑。
111
+ - MUST NOT 图片包含不可翻译文字作为关键信息。
112
+ - MUST NOT 硬编码单一文化节日、单位换算或数字系统。
113
+ - MUST NOT 把 UI 文案 key 用作业务逻辑判断(如 `if (t('status') === '已启用')`)。
114
+ - MUST NOT 在源码提交后才发现缺失 key。
115
+ - MUST NOT 在服务端 render 中读取 `window.navigator.language`。
116
+ - MUST NOT 将未本地化的第三方错误文案直接呈现给用户。
117
+
118
+ ## SHOULD
119
+
120
+ - SHOULD 支持缺失 key 检测和伪本地化。
121
+ - SHOULD 明确存储时区与显示时区。
122
+ - SHOULD 提供 locale 协商:URL > 用户显式选择 > Cookie > `Accept-Language` > 默认。
123
+ - SHOULD 维护 key 命名约定文档 + 禁用词表。
124
+ - SHOULD 提供复数/选择消息的视觉回归测试(阿拉伯语/俄语/波兰语等复杂复数)。
125
+ - SHOULD 在关键业务场景(预约/截止时间)显示时区全名。
126
+ - SHOULD 支持 accounting 格式(负数括号表示)。
127
+ - SHOULD 对关键 UI 文案做 "longest translation" 回归测试。
128
+ - SHOULD 建立可本地化素材清单(illustration/color/icon/photo)。
129
+ - SHOULD 支持 pseudo-localization(伪本地化:lengthening、accents、fake-RTL)做布局回归。
130
+ - SHOULD 在关键错误/空态使用自定义组件替代浏览器原生 `alert()` / `confirm()`。
131
+ - SHOULD 维护第三方 SDK locale/RTL 兼容性矩阵。
132
+
133
+ ## Contract
134
+
135
+ ```text
136
+ Locale, Fallback, KeyNamespace, DateTimePolicy,
137
+ NumberPolicy, CurrencyPolicy, UnitPolicy, EnumPolicy, EmptyPolicy,
138
+ RTLPolicy, PluralPolicy, ListFormatPolicy, CollatorPolicy,
139
+ TranslationWorkflowPolicy, ThirdPartyLocaleMatrix
140
+ ```
141
+
142
+ - `Locale` / `Fallback`:支持的 locale 列表和回退链。
143
+ - `KeyNamespace`:文案 key 的命名空间约定。
144
+ - `DateTimePolicy` / `NumberPolicy` / `CurrencyPolicy` / `UnitPolicy` / `EnumPolicy` / `EmptyPolicy`:Formatter Registry 策略 ID。
145
+ - `RTLPolicy`:RTL locale 列表和布局镜像策略。
146
+ - `PluralPolicy`:ICU MessageFormat 版本和复数分支要求。
147
+ - `ListFormatPolicy` / `CollatorPolicy`:列表连接与排序策略。
148
+ - `TranslationWorkflowPolicy`:source 语言、翻译平台、命名空间拆分、review 策略。
149
+ - `ThirdPartyLocaleMatrix`:第三方 SDK/组件的 locale 与 RTL 兼容性矩阵。
150
+
151
+ ### Formatter Registry
152
+
153
+ `outputs/frontend/10_planned/formatter-registry.yaml` 记录项目级 formatter 策略:
154
+
155
+ ```text
156
+ Category, PolicyId, DefaultValue, UnknownValue, DeprecatedValue,
157
+ Examples, Owner, Version
158
+ ```
159
+
160
+ - Category 至少覆盖 date、time、datetime、number、money、percent、currency、unit、enum、empty。
161
+ - 每个页面或组件必须通过 registry 中声明的 formatter 输出值,禁止本地拼接格式。
162
+
163
+ ## Checklist
164
+
165
+ - [ ] locale 列表、默认 locale、回退链和 locale 协商策略已明确。
166
+ - [ ] 文案外置,无硬编码自然语言;key 使用稳定命名空间标识。
167
+ - [ ] 插值使用命名占位符,HTML 输出经显式标记和安全审查。
168
+ - [ ] ICU MessageFormat 用于复数/性别/状态/序数,且包含 `other` 分支。
169
+ - [ ] 日期/时间/相对时间/数字/货币/百分比/单位通过 Formatter Registry 输出。
170
+ - [ ] 显式时区,不依赖系统时区;UTC 存储,locale 显示。
171
+ - [ ] 列表连接、排序、搜索使用 `Intl.ListFormat` / `Intl.Collator` / locale 感知归一化。
172
+ - [ ] RTL locale 已识别,`dir`、`logical properties`、图标翻转和 `<bdi>` 已处理。
173
+ - [ ] 文本膨胀系数、换行/截断策略、长文案回归已安排。
174
+ - [ ] 图片/图标/颜色/节日/单位/数字系统已做文化适配审查。
175
+ - [ ] source-of-truth 语言、翻译平台、命名空间拆分、review 策略已建立。
176
+ - [ ] SSR 首屏 locale 由服务端确定并序列化;hydration 前后一致。
177
+ - [ ] 后端错误 message 映射为翻译 key;第三方 SDK locale/RTL 矩阵已维护。
178
+ - [ ] 分层国际化责任已按 app/platform/api/domain/feature/shared 分担。
179
+
180
+ ## Examples
181
+
182
+ ### locale 切换保留 URL state
183
+
184
+ ```text
185
+ 切换前: /zh-CN/dashboard?tab=1#section-a
186
+ 切换后: /en-US/dashboard?tab=1#section-a
187
+ ```
188
+
189
+ ### 命名占位符与 ICU plural
190
+
191
+ ```text
192
+ key: "cart.item_count"
193
+ en-US: "You have {itemCount, number} {itemCount, plural, one {item} other {items}}."
194
+ ar-SA: "لديك {itemCount, number} {itemCount, plural, zero {} one {عنصر} two {عنصرين} few {عناصر} many {عنصرًا} other {عنصر}}."
195
+ ```
196
+
197
+ ### Formatter Registry 统一货币显示
198
+
199
+ ```text
200
+ 原始值: 1234.5
201
+ zh-CN 显示: ¥1,234.50
202
+ en-US 显示: $1,234.50
203
+ de-DE 显示: 1.234,50 EUR
204
+ 排序/计算仍使用原始数值 1234.5
205
+ ```
206
+
207
+ ### RTL 使用 logical properties
208
+
209
+ ```css
210
+ /* 推荐 */
211
+ margin-inline-start: 1rem;
212
+ /* 不推荐 */
213
+ margin-left: 1rem;
214
+ ```
215
+
216
+ ### 后端错误映射为翻译 key
217
+
218
+ ```text
219
+ 后端返回: { "code": "ORDER.OUT_OF_STOCK", "message": "Insufficient inventory" }
220
+ 前端显示: t('error.ORDER.OUT_OF_STOCK') -> "库存不足,无法完成订单。"
221
+ ```
222
+
223
+ ## Anti-patterns
224
+
225
+ - 模板拼接币种和单位,切换语言后顺序、间距和小数规则错误。
226
+ - 用 `if (count === 1)` 拼接单复数,阿拉伯语/俄语/波兰语分支错误。
227
+ - 用 `{0}` 位置占位符,翻译调整语序后插值错位。
228
+ - `Date.prototype.toLocaleString()` 无参调用,依赖用户系统时区导致显示不一致。
229
+ - 硬编码 `$` / `¥` 符号,德语、法语显示格式错误。
230
+ - 对格式化后的金额字符串做排序,导致 1000 < 99。
231
+ - 用 `margin-left/right` 物理方向,RTL 布局破裂。
232
+ - 图片包含 "New!" "Sale" 等英文文字,未做本地化即上线。
233
+ - 硬编码春节/圣诞作为默认节日,其他 locale 用户困惑。
234
+ - 后端错误 message 直接展示给用户,暴露内部术语或英文。
235
+ - SSR 服务端用默认 locale 渲染,客户端 hydration 后闪烁切换。
236
+
237
+ ## Ownership
238
+
239
+ 产品/内容 Owner 维护语言范围和文化适配清单,i18n Owner 维护工具、key、Formatter Registry 和翻译工作流,领域 Owner 维护枚举语义和后端错误码映射,前端架构 Owner 维护 locale 切换、SSR hydration 和第三方 SDK 矩阵。
240
+
241
+ ## Change Policy
242
+
243
+ Key 改名先提供别名或迁移;新增 locale 必须补资源、格式、布局回归和 RTL 测试。Formatter Registry 策略变化须评估所有页面/组件影响;第三方 SDK locale/RTL 兼容性矩阵随 SDK 版本更新而更新。
@@ -0,0 +1,79 @@
1
+ ---
2
+ seed_source: pomaster/components/frontend-hard-spec/assets/universal/39-copywriting-protocol.md
3
+ seed_source_sha256: 5df3a2ddcd1140b2e62dd80f547cf6c0197c44a91ebbdda02ded44bcaefed351
4
+ seed_version: B6B-2
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
+ ---
12
+
13
+ # 39 文案协议
14
+
15
+ ## Scope
16
+
17
+ P2。定义按钮、确认、成功、错误、空态、删除、导入导出和高风险操作文案。
18
+
19
+ ## Non-Scope
20
+
21
+ 不定义业务规则和错误码,不允许文案隐藏系统行为。
22
+
23
+ ## Terms
24
+
25
+ - Actionable Copy:说明发生什么、影响什么和下一步的文案。
26
+ - Risk Copy:明确不可逆性、对象和后果的文案。
27
+
28
+ ## MUST
29
+
30
+ - 按钮使用明确动作和对象。
31
+ - 错误说明发生内容、可恢复性和下一步。
32
+ - 空态区分无数据与筛选无结果。
33
+ - 高风险确认明确对象、后果和是否可恢复。
34
+ - 导入导出说明范围、进度、部分成功和结果有效期。
35
+ - 同类操作使用同一名称和语气。
36
+
37
+ ## MUST NOT
38
+
39
+ - MUST NOT 直接展示后端原始 message 或技术堆栈。
40
+ - MUST NOT 高风险操作只写“确定吗”。
41
+ - MUST NOT 用颜色或感叹号代替清晰说明。
42
+ - MUST NOT 用模糊“操作”“处理”隐藏动作。
43
+
44
+ ## SHOULD
45
+
46
+ - SHOULD 简洁、专业、可行动。
47
+ - SHOULD 复用文案模板和错误码映射。
48
+
49
+ ## Contract
50
+
51
+ ```text
52
+ Scenario, Title, Message, PrimaryAction,
53
+ SecondaryAction, Consequence, Recoverability, TraceDisplay
54
+ ```
55
+
56
+ ## Checklist
57
+
58
+ - [ ] 动作和对象明确。
59
+ - [ ] 风险与恢复清晰。
60
+ - [ ] 同类文案一致。
61
+ - [ ] 无原始技术信息。
62
+
63
+ ## Examples
64
+
65
+ ### 内容示例,可删除
66
+
67
+ “该数据已被其他人更新。请比较最新版本后重新提交。”
68
+
69
+ ## Anti-patterns
70
+
71
+ 系统异常只显示“失败!”,用户不知道对象、原因或下一步。
72
+
73
+ ## Ownership
74
+
75
+ 内容/产品 Owner 维护语气,领域 Owner 确认语义,前端负责正确映射。
76
+
77
+ ## Change Policy
78
+
79
+ 公共文案模板变化需评估全部场景;业务术语变化同步 i18n 和帮助内容。
@@ -0,0 +1,98 @@
1
+ ---
2
+ seed_source: pomaster/components/frontend-hard-spec/assets/universal/40-analytics-protocol.md
3
+ seed_source_sha256: f638c8054ba32d44a15f1dd4fa42b637e1f6ad39cd73c6e1d45cd5bfd71b2c56
4
+ seed_version: B6B-2
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
+ ---
12
+
13
+ # 40 埋点协议
14
+
15
+ ## Scope
16
+
17
+ P2。作为业务行为分析的唯一权威,定义用户行为事件、关键业务动作、漏斗、事件 schema、上报时机、去重、同意/授权和分析用途。
18
+
19
+ ## Non-Scope
20
+
21
+ 不替代错误监控、技术 telemetry、Trace/Span、RUM 运行诊断和后端审计;这些运行可观测性规则归 `34-monitoring-logging-protocol`。LCP/INP/CLS 等性能预算与分位数归 `31-performance-protocol`。不允许收集未批准敏感数据。
22
+
23
+ ## Terms
24
+
25
+ - Event Schema:事件名和字段契约。
26
+ - Funnel:按稳定业务阶段关联的一组行为事件,用于分析到达、转化、放弃和结果。
27
+ - OperationId:关联 attempt/result 的操作标识。
28
+ - Deduplication Key:防止重复上报的键。
29
+ - Consent State:当前用户对非必要分析采集的同意、拒绝或撤回状态。
30
+
31
+ ## MUST
32
+
33
+ - 事件使用稳定 key,不使用显示文案。
34
+ - 定义公共字段、业务白名单、触发时机和去重。
35
+ - 每个分析事件必须声明 event_id、schema_version、业务目的、触发条件、字段白名单、隐私分类、Owner、目的地和保留策略;页面或组件不得临时扩展 schema。
36
+ - attempt 与 result 通过 OperationId 关联。
37
+ - 核心用户旅程必须以稳定业务阶段定义漏斗,并明确进入、成功、失败、放弃和不适用口径;漏斗不得依赖显示文案、DOM 或 URL 猜测。
38
+ - 页面重渲染、自动刷新和重试不得误记为用户操作。
39
+ - 敏感字段、搜索原文和业务原值默认不上传。
40
+ - 新事件有 Owner、用途和保留策略。
41
+ - 采集必须遵循适用的同意/授权状态;用户撤回后停止非必要采集,并清理或隔离尚未发送的数据。
42
+ - 事件目的地与 payload 字段必须使用白名单;第三方分析脚本、转发规则和数据出境必须经过安全与隐私评审。
43
+ - page-view、action、attempt/result 等事件必须使用稳定 page_id/action_id/operation_id 关联;技术 trace-id 仅可作为经批准的关联字段,不得把分析事件变成运行日志副本。
44
+
45
+ ## MUST NOT
46
+
47
+ - MUST NOT 同一行为多次上报或多名称。
48
+ - MUST NOT 页面自行扩展不受控公共字段。
49
+ - MUST NOT 用埋点代替审计。
50
+ - MUST NOT 上报权限外数据。
51
+ - MUST NOT 通过抓取 DOM、可见文本、URL 查询参数或用户输入来临时拼装分析数据。
52
+ - MUST NOT 在同意状态未知或撤回后继续发送非必要分析事件。
53
+ - MUST NOT 用业务分析事件替代错误、白屏、API RED、Trace/Span 或 RUM 技术遥测。
54
+ - MUST NOT 把同一业务漏斗阶段在多个页面或组件中定义为不同语义。
55
+
56
+ ## SHOULD
57
+
58
+ - SHOULD 通过 typed analytics client 和 schema 校验。
59
+ - SHOULD 监控事件质量、丢失和重复率。
60
+ - SHOULD 对漏斗的迟到、乱序、重复、跨设备和 consent 变化定义明确处理策略。
61
+
62
+ ## Contract
63
+
64
+ ```text
65
+ EventId, SchemaVersion, Purpose, FunnelId, FunnelStage, PageId, ActionId,
66
+ Trigger, CommonFields, BusinessFields, OperationId, DedupKey, ConsentState,
67
+ PrivacyClass, Destination, Owner, Retention
68
+ ```
69
+
70
+ ## Checklist
71
+
72
+ - [ ] 名称和字段稳定。
73
+ - [ ] 时机与去重正确。
74
+ - [ ] 漏斗阶段、成功/失败/放弃口径和 OperationId 关联明确。
75
+ - [ ] 隐私边界通过。
76
+ - [ ] Owner 和用途明确。
77
+ - [ ] 同意、撤回、目的地白名单和待发送队列清理已验证。
78
+ - [ ] 业务事件未复制 34 的运行诊断或 31 的性能预算规则。
79
+
80
+ ## Examples
81
+
82
+ ### 内容示例,可删除
83
+
84
+ 用户点击导出记录业务 `attempt`,后台任务完成记录 `result`,两者共享 operation id 并进入同一导出漏斗;API 耗时、错误码和 trace 诊断仍由 34 记录。
85
+
86
+ ## Anti-patterns
87
+
88
+ 按钮组件和页面都上报点击,导致同一行为计数两次且字段不同。
89
+
90
+ 把 JS 错误、API RED 指标和 LCP 阈值塞进分析事件 schema,导致运行诊断、性能预算与业务转化口径互相污染。
91
+
92
+ ## Ownership
93
+
94
+ 数据/产品 Owner 定义用途,埋点平台 Owner 维护 schema,安全/隐私 Owner 审核字段。
95
+
96
+ ## Change Policy
97
+
98
+ 事件改名、字段语义和保留变化必须版本化并通知下游消费者。