pomaster 0.4.0 → 0.5.1
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.
- package/README.md +102 -183
- package/catalog/catalog-lock.draft.json +117 -117
- package/catalog/policies/policy.ai.change_plan_first.json +1 -1
- package/catalog/policies/policy.ai.fact_inference_separation.json +1 -1
- package/catalog/policies/policy.ai.read_search_verify_before_write.json +1 -1
- package/catalog/policies/policy.ai.rule_relaxation_approval.json +1 -1
- package/catalog/policies/policy.arch.adr_immutable_history.json +1 -1
- package/catalog/policies/policy.arch.no_convenience_over_boundary.json +1 -1
- package/catalog/policies/policy.arch.prefer_verifiable_option.json +2 -2
- package/catalog/policies/policy.authz.no_gating_proxy_trust.json +1 -1
- package/catalog/policies/policy.authz.permission_scope_expansion_gate.json +1 -1
- package/catalog/policies/policy.authz.server_five_factor_verification.json +1 -1
- package/catalog/policies/policy.be.conc.prefer_db_constraints.json +1 -1
- package/catalog/policies/policy.be.db.expand_migrate_contract.json +1 -1
- package/catalog/policies/policy.be.idem.key_payload_conflict.json +1 -1
- package/catalog/policies/policy.be.model.single_boundary_conversion.json +1 -1
- package/catalog/policies/policy.be.sql.index_for_known_queries.json +1 -1
- package/catalog/policies/policy.be.state.single_rule_source.json +1 -1
- package/catalog/policies/policy.be.txn.short_locks_compensation.json +1 -1
- package/catalog/policies/policy.bound.search_first_entry_only.json +1 -1
- package/catalog/policies/policy.boundary.validate_in_encode_out.json +1 -1
- package/catalog/policies/policy.cache.failure_mode_guards.json +1 -1
- package/catalog/policies/policy.cache.schema_versioning.json +1 -1
- package/catalog/policies/policy.cfg.config_attribute_completeness.json +1 -1
- package/catalog/policies/policy.cfg.key_rename_dual_read.json +1 -1
- package/catalog/policies/policy.cfg.no_secret_dispersal.json +1 -1
- package/catalog/policies/policy.cfg.production_safe_defaults.json +1 -1
- package/catalog/policies/policy.cfg.schema_backed_config.json +1 -1
- package/catalog/policies/policy.chg.no_unrelated_changes.json +1 -1
- package/catalog/policies/policy.contract.no_invented_facts.json +1 -1
- package/catalog/policies/policy.dep.build_path_supply_chain.json +1 -1
- package/catalog/policies/policy.dep.no_untrusted_source_no_lock_bypass.json +1 -1
- package/catalog/policies/policy.dep.time_boxed_urgent_exception.json +1 -1
- package/catalog/policies/policy.deploy.no_dev_env_as_production_fact.json +1 -1
- package/catalog/policies/policy.deploy.operational_capabilities.json +1 -1
- package/catalog/policies/policy.deploy.runtime_fact_record.json +1 -1
- package/catalog/policies/policy.err.failure_five_part_mapping.json +1 -1
- package/catalog/policies/policy.err.no_internal_detail_exposure.json +1 -1
- package/catalog/policies/policy.err.published_code_immutable.json +1 -1
- package/catalog/policies/policy.evid.acceptance_binds_verifiable_evidence.json +1 -1
- package/catalog/policies/policy.evid.no_silent_gate_removal.json +1 -1
- package/catalog/policies/policy.evid.no_unverifiable_pass.json +1 -1
- package/catalog/policies/policy.flag.cleanup_after_full_rollout.json +1 -1
- package/catalog/policies/policy.flag.consistent_off_state.json +1 -1
- package/catalog/policies/policy.flag.kill_switch.json +1 -1
- package/catalog/policies/policy.flag.lifecycle_metadata.json +1 -1
- package/catalog/policies/policy.flag.not_a_permission.json +1 -1
- package/catalog/policies/policy.gate.p0_non_bypassable.json +1 -1
- package/catalog/policies/policy.gate.risk_factors_confirmed.json +1 -1
- package/catalog/policies/policy.guard.no_check_weakening.json +2 -2
- package/catalog/policies/policy.integration.call_definition_minimum.json +1 -1
- package/catalog/policies/policy.integration.fault_containment.json +1 -1
- package/catalog/policies/policy.job.lifecycle_definition.json +1 -1
- package/catalog/policies/policy.job.no_unmanaged_execution.json +1 -1
- package/catalog/policies/policy.job.operational_features.json +1 -1
- package/catalog/policies/policy.obs.actionable_signals.json +1 -1
- package/catalog/policies/policy.obs.alert_with_owner.json +1 -1
- package/catalog/policies/policy.obs.context_field_baseline.json +1 -1
- package/catalog/policies/policy.obs.no_sensitive_or_unbounded_logging.json +1 -1
- package/catalog/policies/policy.obs.no_sensitive_raw_values.json +1 -1
- package/catalog/policies/policy.obs.signal_change_impact.json +1 -1
- package/catalog/policies/policy.obs.source_map_access_control.json +1 -1
- package/catalog/policies/policy.obs.telemetry_lifecycle_declared.json +1 -1
- package/catalog/policies/policy.obs.trace_correlation.json +1 -1
- package/catalog/policies/policy.perf.budget_change_retest.json +1 -1
- package/catalog/policies/policy.perf.evidence_binding.json +1 -1
- package/catalog/policies/policy.perf.observation_dimensions.json +1 -1
- package/catalog/policies/policy.proc.checklist_change_policy.json +2 -2
- package/catalog/policies/policy.proc.scope_drift_reclassify.json +1 -1
- package/catalog/policies/policy.prv.processing_scope_re_review.json +1 -1
- package/catalog/policies/policy.prv.sensitive_data_six_facts.json +1 -1
- package/catalog/policies/policy.registry.human_fields_validated_decorrelated.json +1 -1
- package/catalog/policies/policy.rel.no_irreversible_unmonitored_full_release.json +1 -1
- package/catalog/policies/policy.rel.observability_before_ship.json +1 -1
- package/catalog/policies/policy.rel.process_change_needs_drill_audit.json +1 -1
- package/catalog/policies/policy.rel.traceable_build.json +1 -1
- package/catalog/policies/policy.role.human_signs_for_ai.json +1 -1
- package/catalog/policies/policy.sec.authn_policy_unified.json +1 -1
- package/catalog/policies/policy.sec.no_client_side_trust.json +4 -1
- package/catalog/policies/policy.sec.no_longterm_security_disable.json +1 -1
- package/catalog/policies/policy.sec.no_script_readable_credentials.json +1 -1
- package/catalog/policies/policy.sec.no_secrets_in_client_surface.json +2 -2
- package/catalog/policies/policy.sec.relaxation_approval.json +1 -1
- package/catalog/policies/policy.sec.security_relaxation_gate.json +4 -1
- package/catalog/policies/policy.sec.trust_boundary_enforcement.json +4 -1
- package/catalog/policies/policy.sec.upload_download_server_recheck.json +1 -1
- package/catalog/policies/policy.sec.url_source_allowlist.json +1 -1
- package/catalog/policies/policy.spec.family_conflict_precedence.json +1 -1
- package/catalog/policies/policy.spec.freeze_before_use.json +1 -1
- package/catalog/policies/policy.spec.primary_source_basis.json +1 -1
- package/catalog/policies/policy.struct.module_entry_dependency_declared.json +1 -1
- package/catalog/policies/policy.struct.no_unexplained_top_level_dir.json +1 -1
- package/catalog/policies/policy.struct.reuse_proven_structure.json +1 -1
- package/catalog/policies/policy.test.control_nondeterminism_keep_diagnosis.json +1 -1
- package/catalog/policies/policy.test.isolation_and_cleanup.json +1 -1
- package/catalog/policies/policy.test.no_synthetic_stability.json +1 -1
- package/catalog/policies/policy.test.pyramid_and_ci_matrix.json +1 -1
- package/catalog/policies/policy.test.removal_justification.json +1 -1
- package/catalog/policies/policy.test.removal_needs_substitute_evidence.json +1 -1
- package/catalog/policies/policy.test.risk_driven_plan.json +1 -1
- package/catalog/policies/policy.test.stable_observable_assertions.json +1 -1
- package/catalog/policies/policy.tool.discoverable_toolchain.json +1 -1
- package/catalog/policies/policy.tool.no_hand_edit_generated_no_ci_drift.json +1 -1
- package/catalog/policies/policy.tool.no_vendored_body_edits.json +1 -1
- package/catalog/policies/policy.tool.upgrade_verify_lock_rollback.json +1 -1
- package/catalog/policies/policy.web.comp.no_trivial_or_god_component.json +1 -1
- package/catalog/policies/policy.web.comp.public_contract_completeness.json +1 -1
- package/catalog/policies/policy.web.copy.action_object_clarity.json +1 -1
- package/catalog/policies/policy.web.copy.enumerable_placement.json +1 -1
- package/catalog/policies/policy.web.copy.error_next_step.json +1 -1
- package/catalog/policies/policy.web.handoff.state_matrix_full.json +1 -1
- package/catalog/policies/policy.web.i18n.copy_key_discipline.json +1 -1
- package/catalog/policies/policy.web.i18n.raw_value_for_compute.json +1 -1
- package/catalog/policies/policy.web.page.region_consistency.json +1 -1
- package/catalog/policies/policy.web.track.attempt_result_correlation.json +1 -1
- package/catalog/policies/policy.web.track.no_synthetic_actions.json +1 -1
- package/catalog/policies/policy.web.track.typed_client_validation.json +1 -1
- package/catalog/policies/policy.wf.no_planned_as_verified.json +1 -1
- package/catalog/policies/policy.wf.task_facts_preconfirm.json +1 -1
- package/dist/bin.js +11233 -7336
- package/legal/THIRD_PARTY_NOTICES.md +461 -35
- package/package.json +1 -1
- package/seeds/aggregation-manifest.json +691 -0
- package/seeds/manifest.json +466 -1043
- package/seeds/specs/hard/stacks/antdesign/antdesign-ui-overlay.md +48 -0
- package/seeds/specs/hard/stacks/antdesign/index.md +20 -0
- package/seeds/specs/hard/stacks/css/css-system-overlay.md +52 -0
- package/seeds/specs/hard/stacks/css/index.md +20 -0
- package/seeds/specs/hard/stacks/geist/geist-design-system-overlay.md +48 -0
- package/seeds/specs/hard/stacks/geist/index.md +20 -0
- package/seeds/specs/hard/stacks/vue3/index.md +20 -0
- package/seeds/specs/hard/stacks/vue3/vue3-framework-overlay.md +71 -0
- package/seeds/specs/hard/themes/ai-generated-code.md +171 -0
- package/seeds/specs/hard/themes/api-contract-and-error-semantics.md +532 -0
- package/seeds/specs/hard/themes/architecture-and-module-boundaries.md +323 -0
- package/seeds/specs/hard/themes/data-and-transactions.md +582 -0
- package/seeds/specs/hard/themes/engineering-toolchain-and-dependencies.md +333 -0
- package/seeds/specs/hard/themes/environment-and-configuration.md +196 -0
- package/seeds/specs/hard/themes/frontend-state-and-client-data.md +342 -0
- package/seeds/specs/hard/themes/index.md +374 -0
- package/seeds/specs/hard/themes/integration-and-async-runtime.md +331 -0
- package/seeds/specs/hard/{frontend/38-internationalization-protocol.md → themes/internationalization-and-copywriting.md} +112 -5
- package/seeds/specs/hard/themes/observability-and-analytics.md +305 -0
- package/seeds/specs/hard/themes/page-composition-and-browser-environment.md +554 -0
- package/seeds/specs/hard/{frontend/31-performance-protocol.md → themes/performance-and-capacity.md} +95 -6
- package/seeds/specs/hard/themes/permission-and-authorization.md +168 -0
- package/seeds/specs/hard/themes/privacy-and-data-lifecycle.md +176 -0
- package/seeds/specs/hard/themes/release-and-feature-flags.md +237 -0
- package/seeds/specs/hard/{frontend/04-security-protocol.md → themes/security.md} +95 -6
- package/seeds/specs/hard/themes/task-governance-and-acceptance.md +554 -0
- package/seeds/specs/hard/themes/testing-and-verification.md +266 -0
- package/seeds/specs/hard/themes/ui-presentation-and-design.md +670 -0
- package/seeds/specs/hard/themes/value-semantics-and-domain-data.md +339 -0
- package/seeds/specs/hard/backend/01-architecture-governance-protocol.md +0 -68
- package/seeds/specs/hard/backend/02-project-structure-governance-protocol.md +0 -68
- package/seeds/specs/hard/backend/03-directory-boundary-protocol.md +0 -68
- package/seeds/specs/hard/backend/04-layering-architecture-protocol.md +0 -68
- package/seeds/specs/hard/backend/05-task-workflow-protocol.md +0 -68
- package/seeds/specs/hard/backend/06-ai-generated-code-protocol.md +0 -68
- package/seeds/specs/hard/backend/07-evidence-acceptance-protocol.md +0 -68
- package/seeds/specs/hard/backend/08-contract-change-protocol.md +0 -68
- package/seeds/specs/hard/backend/09-role-responsibility-protocol.md +0 -68
- package/seeds/specs/hard/backend/10-security-protocol.md +0 -68
- package/seeds/specs/hard/backend/11-environment-configuration-protocol.md +0 -67
- package/seeds/specs/hard/backend/12-api-contract-protocol.md +0 -68
- package/seeds/specs/hard/backend/13-privacy-data-lifecycle-protocol.md +0 -68
- package/seeds/specs/hard/backend/14-business-rules-state-protocol.md +0 -68
- package/seeds/specs/hard/backend/15-data-model-protocol.md +0 -68
- package/seeds/specs/hard/backend/16-error-code-protocol.md +0 -68
- package/seeds/specs/hard/backend/17-permission-authorization-protocol.md +0 -68
- package/seeds/specs/hard/backend/18-database-schema-migration-protocol.md +0 -68
- package/seeds/specs/hard/backend/19-query-index-sql-protocol.md +0 -68
- package/seeds/specs/hard/backend/20-transaction-boundary-protocol.md +0 -68
- package/seeds/specs/hard/backend/21-concurrency-locking-protocol.md +0 -68
- package/seeds/specs/hard/backend/22-idempotency-protocol.md +0 -68
- package/seeds/specs/hard/backend/23-cache-redis-consistency-protocol.md +0 -68
- package/seeds/specs/hard/backend/24-external-integration-resilience-protocol.md +0 -68
- package/seeds/specs/hard/backend/25-async-job-scheduler-protocol.md +0 -68
- package/seeds/specs/hard/backend/26-engineering-tooling-protocol.md +0 -68
- package/seeds/specs/hard/backend/27-dependency-supply-chain-protocol.md +0 -68
- package/seeds/specs/hard/backend/28-testing-protocol.md +0 -68
- package/seeds/specs/hard/backend/29-observability-logging-tracing-protocol.md +0 -68
- package/seeds/specs/hard/backend/30-performance-capacity-protocol.md +0 -68
- package/seeds/specs/hard/backend/31-runtime-deployment-protocol.md +0 -68
- package/seeds/specs/hard/backend/32-release-versioning-rollback-protocol.md +0 -68
- package/seeds/specs/hard/backend/index.md +0 -177
- package/seeds/specs/hard/frontend/01-development-checklist-protocol.md +0 -86
- package/seeds/specs/hard/frontend/02-ai-generated-code-protocol.md +0 -82
- package/seeds/specs/hard/frontend/03-acceptance-gate-protocol.md +0 -86
- package/seeds/specs/hard/frontend/05-environment-configuration-protocol.md +0 -80
- package/seeds/specs/hard/frontend/06-change-governance-protocol.md +0 -90
- package/seeds/specs/hard/frontend/07-frontend-backend-communication-protocol.md +0 -219
- package/seeds/specs/hard/frontend/08-role-responsibility-protocol.md +0 -80
- package/seeds/specs/hard/frontend/09-module-boundary-protocol.md +0 -81
- package/seeds/specs/hard/frontend/10-engineering-tooling-protocol.md +0 -89
- package/seeds/specs/hard/frontend/11-dependency-package-management-protocol.md +0 -87
- package/seeds/specs/hard/frontend/12-business-rules-protocol.md +0 -79
- package/seeds/specs/hard/frontend/13-monetary-precision-protocol.md +0 -81
- package/seeds/specs/hard/frontend/14-data-model-protocol.md +0 -85
- package/seeds/specs/hard/frontend/15-request-api-protocol.md +0 -87
- package/seeds/specs/hard/frontend/16-error-handling-protocol.md +0 -79
- package/seeds/specs/hard/frontend/17-permission-protocol.md +0 -79
- package/seeds/specs/hard/frontend/18-state-management-protocol.md +0 -88
- package/seeds/specs/hard/frontend/19-cache-protocol.md +0 -79
- package/seeds/specs/hard/frontend/20-testing-protocol.md +0 -88
- package/seeds/specs/hard/frontend/21-design-system-protocol.md +0 -79
- package/seeds/specs/hard/frontend/22-theme-protocol.md +0 -79
- package/seeds/specs/hard/frontend/23-accessibility-protocol.md +0 -189
- package/seeds/specs/hard/frontend/24-component-protocol.md +0 -80
- package/seeds/specs/hard/frontend/25-page-structure-protocol.md +0 -79
- package/seeds/specs/hard/frontend/26-style-layout-protocol.md +0 -80
- package/seeds/specs/hard/frontend/27-rendering-state-protocol.md +0 -81
- package/seeds/specs/hard/frontend/28-form-protocol.md +0 -88
- package/seeds/specs/hard/frontend/29-routing-url-protocol.md +0 -79
- package/seeds/specs/hard/frontend/30-data-grid-protocol.md +0 -83
- package/seeds/specs/hard/frontend/32-file-import-export-protocol.md +0 -80
- package/seeds/specs/hard/frontend/33-release-versioning-protocol.md +0 -79
- package/seeds/specs/hard/frontend/34-monitoring-logging-protocol.md +0 -128
- package/seeds/specs/hard/frontend/35-mock-protocol.md +0 -97
- package/seeds/specs/hard/frontend/36-feature-flag-protocol.md +0 -79
- package/seeds/specs/hard/frontend/37-browser-device-compatibility-protocol.md +0 -83
- package/seeds/specs/hard/frontend/39-copywriting-protocol.md +0 -79
- package/seeds/specs/hard/frontend/40-analytics-protocol.md +0 -98
- package/seeds/specs/hard/frontend/41-design-handoff-protocol.md +0 -80
- package/seeds/specs/hard/frontend/42-browser-runtime-lifecycle-protocol.md +0 -86
- package/seeds/specs/hard/frontend/43-time-temporal-protocol.md +0 -86
- package/seeds/specs/hard/frontend/44-privacy-data-lifecycle-protocol.md +0 -87
- package/seeds/specs/hard/frontend/45-browser-storage-protocol.md +0 -87
- package/seeds/specs/hard/frontend/index.md +0 -308
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/23-accessibility-protocol.md
|
|
3
|
-
seed_source_sha256: 10557bf1221d1cf2748e29149820890e4523789701a35f7336e3f661fed82bfb
|
|
4
|
-
seed_version: B6B-1
|
|
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
|
-
# 23 可访问性协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义项目级可访问性治理:以 WCAG 2.2 AA 为默认目标,覆盖语义化 HTML、键盘导航、焦点管理、ARIA 使用、屏幕阅读器支持、颜色与对比度、表单与错误、动态内容/通知、响应式/缩放/触控目标、媒体与动画、时间限制/会话、可读性与认知负荷,以及第三方/自造组件 a11y 矩阵。具体组件的 props/role/keyboard map/focus 行为由 component-registry 的 vendor_api_ref 或自造组件 a11y 字段落地;本协议定义项目级检查点、工具链、例外流程和跨目录层级责任。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
- 不替代 WCAG 2.2、WAI-ARIA 1.2、WAI-ARIA APG 等官方标准;本协议是项目治理层对它们的应用与检查点映射。
|
|
22
|
-
- 不替代具体组件业务规则,也不以自动化扫描通过作为可访问性验收的唯一证据。
|
|
23
|
-
- 不在组件协议 24 中重复定义组件级 a11y API;组件协议 24 的 Checklist 引用本协议,组件实现细节落到 component-registry / vendor_api_ref。
|
|
24
|
-
- 不定义消费项目的视觉稿或品牌色;项目阈值和选型下沉到 a11y-requirements.yaml,universal 只规定必须存在的决策与证据。
|
|
25
|
-
|
|
26
|
-
## Terms
|
|
27
|
-
|
|
28
|
-
- **Accessible Name**:辅助技术识别控件时朗读的名称,可来自可见文本、aria-label、aria-labelledby 或原生标签。
|
|
29
|
-
- **Focus Indicator**:键盘焦点在控件上可见的指示器,可以是浏览器默认轮廓或同等级可见替代。
|
|
30
|
-
- **Landmark**:HTML 语义区域(main、nav、aside、header、footer、section 等),辅助技术可快速跳转。
|
|
31
|
-
- **Live Region**:不抢夺焦点即可向屏幕阅读器宣布动态内容的区域(aria-live polite/assertive)。
|
|
32
|
-
- **Roving Tabindex**:组合组件(tabs、listbox、grid)中仅在活动项上放置 tabindex="0"、其余为 -1 的键盘模式。
|
|
33
|
-
- **Skip Link**:跳到主内容(main)的隐藏/可见链接,使键盘用户绕过重复导航块(WCAG 2.4.1)。
|
|
34
|
-
- **WCAG SC**:Web Content Accessibility Guidelines 成功准则(Success Criterion),例如 1.4.3、2.1.1。
|
|
35
|
-
|
|
36
|
-
## MUST
|
|
37
|
-
|
|
38
|
-
- 默认目标必须达到 WCAG 2.2 AA;未满足项必须记录适用成功准则、影响、替代路径、Owner 和修复期限。
|
|
39
|
-
- 所有交互元素必须可通过键盘到达并操作;Tab 顺序与视觉顺序一致(WCAG 2.1.1 / 2.4.3)。
|
|
40
|
-
- 页面使用 header、nav、main、aside、footer、section、article 等语义元素;存在唯一的 main 地标(WCAG 2.4.1 / 1.3.1)。
|
|
41
|
-
- 主导航和重复块必须可被跳过(skip link 或地标跳转);标题层级 h1–h6 与视觉层级一致,不跳过层级(WCAG 2.4.6)。
|
|
42
|
-
- 使用原生 HTML 语义可承载时优先使用原生元素;不得用无语义 div/span 模拟按钮、链接、表单控件(WCAG 4.1.2)。
|
|
43
|
-
- 弹层、抽屉、对话框打开后必须接管焦点,关闭后返回触发元素;背景不得保持可 Tab(WCAG 2.4.3 / 2.1.2)。
|
|
44
|
-
- 焦点必须可见,且不得被吸顶栏、浮层、sticky 元素完全遮挡(WCAG 2.4.7 / 2.4.11)。
|
|
45
|
-
- 所有非装饰图像必须提供等效 alt 文本;复杂图像提供 longer description 或 aria-describedby(WCAG 1.1.1)。
|
|
46
|
-
- 表单控件必须通过 label、aria-label 或 aria-labelledby 提供可见/可访问名称;placeholder 不得作为唯一标签(WCAG 3.3.2 / 1.3.1)。
|
|
47
|
-
- 错误必须与字段关联,并以文本描述提供纠错建议;提交时提供错误摘要并聚焦第一个错误字段(WCAG 3.3.1 / 3.3.3)。
|
|
48
|
-
- 颜色不得作为唯一信息来源;文本对比度至少 4.5:1,大文本至少 3:1,UI 组件/图标边界至少 3:1(WCAG 1.4.1 / 1.4.3 / 1.4.11)。
|
|
49
|
-
- 内容在 320 CSS px 宽度下可纵向阅读,不出现横向滚动;不得禁用浏览器缩放或固定视口(WCAG 1.4.10 / 1.4.4)。
|
|
50
|
-
- 触控目标尺寸至少 24×24 CSS px,且目标之间提供足够间距(WCAG 2.5.8);建议达到 44×44(AAA)。
|
|
51
|
-
- 依赖拖拽的操作必须提供无需拖拽的等价路径(WCAG 2.5.7)。
|
|
52
|
-
- 动态状态、异步结果、进度变化必须可在不抢夺焦点的前提下被辅助技术识别;使用 aria-live 区域并区分 polite/assertive(WCAG 4.1.3)。
|
|
53
|
-
- 路由/页面切换后必须更新 document.title 并宣布页面变化(如聚焦到 h1 或 live region)。
|
|
54
|
-
- 自动播放音频超过 3 秒必须提供暂停/停止/音量控制;自动播放视频必须可被控制且不得禁用 reduced-motion(WCAG 1.4.2 / 2.3.3)。
|
|
55
|
-
- 尊重 prefers-reduced-motion:动画、滚动、过渡在减少动效模式下关闭或降级;闪烁内容不超过每秒 3 次(WCAG 2.3.1 / 2.3.3)。
|
|
56
|
-
- 登录、认证、会话超时流程必须兼容密码管理器和粘贴;超时前至少提供 20 秒警告并允许延长(WCAG 2.2.1 / 2.2.6 / 3.3.8)。
|
|
57
|
-
- 同一流程已输入的信息不得无理由要求重复录入;高风险操作必须提供确认、复核、撤销或等效防错机制(WCAG 3.3.4 / 3.3.7)。
|
|
58
|
-
- 页面 html 必须声明主语言 lang;内容中局部语言变化使用 lang 属性(WCAG 3.1.1 / 3.1.2)。
|
|
59
|
-
- 必须建立并维护 vendor_a11y_matrix:每个第三方组件(Ant Design、Vant、图表库、编辑器、地图等)记录已知 a11y 能力、缺陷、版本限制与替代策略;升级前进行破坏性变更评估。
|
|
60
|
-
- 自造组件或无 vendor 可引用时,必须写完整 a11y spec:role、keyboard map、focus entry/return、live announcement、contrast、target size、reduced-motion(WCAG 2.2 AA)。
|
|
61
|
-
|
|
62
|
-
### 分层责任(按目录层级)
|
|
63
|
-
|
|
64
|
-
可访问性是架构期约束,按目录层级分担责任;每层有明确的检查点与禁止行为。层级划分与 09-module-boundary-protocol 一致。
|
|
65
|
-
|
|
66
|
-
- **app 层 — 应用级可访问性骨架**:提供唯一的 main 地标、skip link、lang 声明、document.title 更新策略、全局 reduced-motion 开关和 focus indicator token。MUST NOT 在 body 或顶层容器使用 aria-hidden="true";MUST NOT 禁用浏览器缩放或锁定视口。
|
|
67
|
-
- **platform 层 — 状态/会话可访问性**:认证/会话超时状态必须通过文本或 live region 宣布;全局错误/通知必须使用统一的 live region 策略。MUST NOT 在超时或认证失败后无警告地丢失已输入数据;MUST NOT 要求用户仅靠记忆、转录或解谜完成认证。
|
|
68
|
-
- **api 层 — 后端契约与错误可读性**:API 错误 message 必须可映射到可读文本和修复建议;auth/session 接口必须支持密码管理器、粘贴和超时延长。MUST NOT 返回仅依赖颜色或错误码的内部错误文本。
|
|
69
|
-
- **domain 层 — 领域语义与 a11y 映射**:领域实体状态(如审核结果、风险等级)不得仅用颜色/图标表达;必须提供文本标签和 aria 等价描述。MUST NOT 把业务语义隐藏在无标签的图标或图表元素中。
|
|
70
|
-
- **feature 层 — 页面级可访问性**:每个页面必须声明 WCAG 目标、skip link、焦点策略、live region 策略和错误聚焦行为;页面内组合组件(tabs、grid、listbox)必须实现 ARIA APG 键盘模式。MUST NOT 页面内存在无法通过键盘到达的交互;MUST NOT 路由切换无标题更新/读屏宣布。
|
|
71
|
-
- **shared 层 — 公共组件可访问性**:Table / Tree / Select / Form / Modal / Virtual List / Tabs / Grid 等公共组件必须有文档化的 role、keyboard map、focus entry/return、live announcement 和 contrast 要求;第三方组件必须引用 vendor_a11y_ref。MUST NOT 使用无 a11y spec 的自造组件;MUST NOT 用自定义 ARIA 覆盖破坏 vendor 默认键盘/焦点行为。
|
|
72
|
-
|
|
73
|
-
## MUST NOT
|
|
74
|
-
|
|
75
|
-
- MUST NOT 用无语义 div/span 模拟按钮、链接或表单控件。
|
|
76
|
-
- MUST NOT 移除焦点轮廓而无同等级可见替代。
|
|
77
|
-
- MUST NOT 仅通过颜色、hover 或 tooltip 传递关键信息。
|
|
78
|
-
- MUST NOT 弹层/抽屉焦点泄漏到背景。
|
|
79
|
-
- MUST NOT 在 aria-hidden="true" 下包裹仍可聚焦元素或包含可聚焦子元素。
|
|
80
|
-
- MUST NOT 使用已废弃的 ARIA role(如 directory)或拼写错误的 role。
|
|
81
|
-
- MUST NOT 在 body 上使用 aria-hidden="true"。
|
|
82
|
-
- MUST NOT 禁用浏览器缩放(user-scalable=no / maximum-scale=1.0)或锁定设备方向。
|
|
83
|
-
- MUST NOT 以自动化扫描通过作为可访问性验收的唯一证据。
|
|
84
|
-
- MUST NOT 图标按钮缺少 aria-label 或等效可访问名称。
|
|
85
|
-
- MUST NOT 错误提示仅通过颜色或 tooltip 呈现;不得在输入时无提示提交错误数据。
|
|
86
|
-
- MUST NOT 错误通知自动消失且不可恢复(除非用户可重新查看)。
|
|
87
|
-
- MUST NOT 非关键消息使用 assertive live region;MUST NOT 关键状态不宣布。
|
|
88
|
-
- MUST NOT 装饰图像使用非空 alt;MUST NOT 信息图像缺少 alt。
|
|
89
|
-
- MUST NOT 自动播放带声音的视频且无控制;MUST NOT 使用 blink / marquee 等已废弃元素。
|
|
90
|
-
- MUST NOT 超时/会话在无警告下失效;MUST NOT 认证流程禁用粘贴或仅依赖认知测试。
|
|
91
|
-
- MUST NOT 第三方组件假设开箱即用即符合项目 WCAG 目标;MUST NOT 用自定义 ARIA 覆盖破坏 vendor 默认键盘/焦点行为。
|
|
92
|
-
- MUST NOT 同一路径使用不同文案或图标表示同一功能;MUST NOT 导航/标签在页面内不一致。
|
|
93
|
-
|
|
94
|
-
## SHOULD
|
|
95
|
-
|
|
96
|
-
- SHOULD 以 WCAG 2.2 AA 为默认目标,并在关键公开路径追求 AAA 增强项。
|
|
97
|
-
- SHOULD 自动扫描(axe-core / Lighthouse)加人工键盘遍历、屏幕阅读器抽查和触控测试。
|
|
98
|
-
- SHOULD 为复杂组合组件使用 ARIA APG 设计模式(tabs、dialog、menu、treegrid)。
|
|
99
|
-
- SHOULD 提供统一、设计系统级别的 focus indicator token(颜色、宽度、offset、:focus-visible)。
|
|
100
|
-
- SHOULD 支持 prefers-reduced-motion 并关闭/降级动画、滚动、过渡。
|
|
101
|
-
- SHOULD 为长表单、多步骤流程提供进度保存与恢复机制。
|
|
102
|
-
- SHOULD 为复杂图表、媒体提供数据表格、长描述或音频描述。
|
|
103
|
-
- SHOULD 对第三方组件进行 spot check(键盘 + 屏幕阅读器 + axe-core)并记录到组件注册表。
|
|
104
|
-
|
|
105
|
-
## Contract
|
|
106
|
-
|
|
107
|
-
组件级 a11y 契约(保留原有字段,用于 component-registry / vendor_api_ref):
|
|
108
|
-
|
|
109
|
-
```text
|
|
110
|
-
Component, Role, AccessibleName, KeyboardMap,
|
|
111
|
-
FocusEntry, FocusReturn, LiveAnnouncements, ContrastRequirement
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
项目级可访问性治理契约(按目录层级):
|
|
115
|
-
|
|
116
|
-
```text
|
|
117
|
-
Layer, AccessibilityRequirement, WcagTarget, AssistiveTechMatrix,
|
|
118
|
-
KeyboardPolicy, FocusPolicy, TargetSizePolicy, ReducedMotionPolicy, VendorA11yRef
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
分层责任契约表(按目录层级,与 09-module-boundary-protocol 一致):
|
|
122
|
-
|
|
123
|
-
```text
|
|
124
|
-
app, 应用级骨架(地标/skip/lang/缩放/focus token), 2.4.1/2.4.6/1.3.1/1.4.4/2.4.7, 屏幕阅读器/键盘, skip link, focus indicator, 24/44px, prefers-reduced-motion, N/A
|
|
125
|
-
platform, 会话/状态/通知可读性, 2.2.1/2.2.6/3.3.8/4.1.3, 屏幕阅读器, 超时延长, 全局 live region, N/A, N/A, N/A
|
|
126
|
-
api, 后端错误可读性/认证支持, 3.3.1/3.3.2/3.3.8, 屏幕阅读器, 粘贴/密码管理器, 错误关联, N/A, N/A, N/A
|
|
127
|
-
domain, 领域语义/状态文本化, 1.4.1/1.3.1, 屏幕阅读器/色觉, N/A, 图标/图表标签, N/A, N/A, N/A
|
|
128
|
-
feature, 页面级键盘/焦点/路由/表单, 2.1.1/2.4.3/2.4.7/2.4.11/3.3.1/3.3.3, 键盘/屏幕阅读器, roving tabindex, 弹层焦点管理, 24/44px, 动画降级, vendor_a11y_ref
|
|
129
|
-
shared, 公共组件 a11y spec/矩阵, 4.1.2/1.1.1/2.4.7/2.5.8, 键盘/屏幕阅读器/放大, APG 键盘图, focus entry/return, 24/44px, reduced-motion, vendor_a11y_ref
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## Checklist
|
|
133
|
-
|
|
134
|
-
- [ ] 默认 WCAG 2.2 AA 目标及例外记录完成。
|
|
135
|
-
- [ ] 语义 HTML 与地标(main/nav/header/footer/skip link)正确。
|
|
136
|
-
- [ ] 标题层级与视觉层级一致,无跳过层级。
|
|
137
|
-
- [ ] 键盘路径完整,Tab 顺序与视觉顺序一致,焦点可见且不被遮挡。
|
|
138
|
-
- [ ] 弹层/抽屉焦点管理正确(进入、困住、返回、背景屏蔽)。
|
|
139
|
-
- [ ] ARIA 使用有效,无冗余、无废弃 role、无 aria-hidden 包裹可聚焦元素。
|
|
140
|
-
- [ ] 屏幕阅读器标签、alt 文本、表单 label、错误关联正确。
|
|
141
|
-
- [ ] 对比度、颜色依赖、focus indicator、320px reflow、缩放策略通过。
|
|
142
|
-
- [ ] 表单错误聚焦、摘要、纠正建议、required 标识通过。
|
|
143
|
-
- [ ] 动态内容/通知使用合适的 live region,路由/页面切换有标题更新和宣布。
|
|
144
|
-
- [ ] 触控目标 >=24px、间距合理,响应式/缩放/方向策略合规。
|
|
145
|
-
- [ ] 媒体/动画有控制、字幕/音频描述、reduced-motion、闪烁安全。
|
|
146
|
-
- [ ] 时间限制/会话超时/认证流程支持延长、粘贴、密码管理器、数据保留。
|
|
147
|
-
- [ ] 可读性:lang 声明、局部语言、导航一致性、错误文本可读、缩写解释。
|
|
148
|
-
- [ ] 第三方/自造组件 a11y 矩阵和 spot check 完成;vendor_a11y_ref 正确引用。
|
|
149
|
-
- [ ] 分层责任按 app/platform/api/domain/feature/shared 确认,每层检查点与禁止行为已落地。
|
|
150
|
-
|
|
151
|
-
## Examples
|
|
152
|
-
|
|
153
|
-
### 真实示例(推荐)
|
|
154
|
-
|
|
155
|
-
- 筛选抽屉打开时,焦点进入抽屉内第一个可聚焦元素(如标题或首个字段);关闭时焦点返回到触发按钮,并 polite 宣布“筛选条件已应用,N 个结果”。
|
|
156
|
-
- 表单提交失败时,页面顶部出现错误摘要,并自动聚焦到第一个错误字段;每个错误字段使用 aria-describedby 关联具体错误文本。
|
|
157
|
-
- 数据表格使用 APG 的 grid 模式:方向键在单元格间移动,Enter 进入编辑,Escape 退出编辑,焦点始终停留在表格内,不会泄漏到背景。
|
|
158
|
-
- 页面 html lang="zh-CN";当用户切换到英文内容块时,该块使用 lang="en",屏幕阅读器切换语音。
|
|
159
|
-
- 图表组件同时提供数据表格视图入口和 aria-label 摘要,使屏幕阅读器用户能访问数值和趋势。
|
|
160
|
-
- 认证页面允许粘贴密码,会话超时前弹出 20 秒警告,提供“延长会话”按钮,并自动保存表单草稿以便恢复。
|
|
161
|
-
|
|
162
|
-
## Anti-patterns
|
|
163
|
-
|
|
164
|
-
- 可点击 div 只支持鼠标,键盘和屏幕阅读器无法触发。
|
|
165
|
-
- 状态仅用红绿颜色区分(如“成功/失败”),未提供文本或图标标签。
|
|
166
|
-
- 移除所有按钮的 outline 而未提供替代 focus indicator,导致键盘用户无法看到焦点。
|
|
167
|
-
- 弹层打开后背景仍可 Tab,或关闭后焦点丢失到 body 而不是触发按钮。
|
|
168
|
-
- 信息图像使用 alt="" 或被 CSS 背景隐藏,屏幕阅读器无法识别。
|
|
169
|
-
- 图标按钮缺少 aria-label,屏幕阅读器只朗读“按钮”或“未标记”。
|
|
170
|
-
- 错误提示仅显示红色边框或 tooltip,未与字段关联,也未提供纠正建议。
|
|
171
|
-
- 禁用缩放导致低视力用户无法放大到 200%。
|
|
172
|
-
- 自动播放的宣传视频无暂停控制,且未响应 prefers-reduced-motion。
|
|
173
|
-
- 超时后立即登出并清空表单,未警告也未保存草稿。
|
|
174
|
-
- 第三方图表库假设开箱即用,未记录其 a11y 缺陷和规避策略。
|
|
175
|
-
|
|
176
|
-
## Ownership
|
|
177
|
-
|
|
178
|
-
- 前端 A11y Owner 维护 WCAG 目标、检查点、vendor_a11y_matrix 和扫描工具链。
|
|
179
|
-
- 设计 Owner 负责颜色对比度、focus indicator、触控目标、reduced-motion 视觉策略。
|
|
180
|
-
- 组件 Owner 负责实现组件级 a11y spec(role、keyboard map、focus entry/return、live announcement)。
|
|
181
|
-
- QA / Accessibility Owner 负责键盘遍历、屏幕阅读器抽查、axe-core 扫描和例外审批。
|
|
182
|
-
- 后端 Owner 配合认证/会话/错误 message 的可读性与超时策略。
|
|
183
|
-
|
|
184
|
-
## Change Policy
|
|
185
|
-
|
|
186
|
-
- 可访问性例外必须记录阻塞原因、适用 WCAG SC、影响、替代路径、Owner 和修复期限。
|
|
187
|
-
- 新增第三方组件或升级第三方组件前,必须对比 vendor_a11y_matrix,评估破坏性 a11y 变更。
|
|
188
|
-
- 新增自造组件必须同步提交组件级 a11y spec,未经 review 不得进入公共组件目录。
|
|
189
|
-
- 页面级 WCAG 目标收紧(如从 AA 到 AAA)或放宽(如特定页面降级)必须走变更治理,并更新 a11y-requirements.yaml。
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/24-component-protocol.md
|
|
3
|
-
seed_source_sha256: 5ed49550278ae263d7b4f3914c20c31a3005dc101d45bbd48c025a444f7441c4
|
|
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
|
-
# 24 组件协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义组件分层、复用门槛、目录、Props、Events、Slots、状态和公共 API。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
不定义页面整体结构,不允许组件隐式承担接口、路由和全局状态职责。
|
|
22
|
-
|
|
23
|
-
## Terms
|
|
24
|
-
|
|
25
|
-
- Base Component:无业务语义的基础控件。
|
|
26
|
-
- Domain Component:具有稳定领域语义的组件。
|
|
27
|
-
- Page-local Component:只服务单页的内部组件。
|
|
28
|
-
- Public Component:跨所有者复用并有稳定 contract 的组件。
|
|
29
|
-
|
|
30
|
-
## MUST
|
|
31
|
-
|
|
32
|
-
- 新建前搜索现有组件并记录不能复用的原因。
|
|
33
|
-
- 组件归属、Owner、目的和非目标明确。
|
|
34
|
-
- Public Component 有类型化 Props、Events、Slots、状态、文档、测试和公开入口。
|
|
35
|
-
- 状态至少考虑 loading、empty、error、disabled、readonly 和 focus。
|
|
36
|
-
- 第二个消费者出现时重新评估提升层级。
|
|
37
|
-
|
|
38
|
-
## MUST NOT
|
|
39
|
-
|
|
40
|
-
- MUST NOT 为减少几行代码创建无职责组件。
|
|
41
|
-
- MUST NOT 传整个 DTO 或万能配置对象。
|
|
42
|
-
- MUST NOT 让展示组件偷偷请求接口、改路由或全局状态。
|
|
43
|
-
- MUST NOT 从其他页面内部目录引用组件。
|
|
44
|
-
|
|
45
|
-
## SHOULD
|
|
46
|
-
|
|
47
|
-
- SHOULD 使用受控输入和语义事件。
|
|
48
|
-
- SHOULD 提供可运行示例和弃用策略。
|
|
49
|
-
|
|
50
|
-
## Contract
|
|
51
|
-
|
|
52
|
-
```text
|
|
53
|
-
Purpose, Owner, Props, Events, Slots, PublicMethods,
|
|
54
|
-
States, Permissions, Accessibility, Tokens, ReuseRules, ForbiddenChanges
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Checklist
|
|
58
|
-
|
|
59
|
-
- [ ] 复用搜索完成。
|
|
60
|
-
- [ ] 分层和公开入口正确。
|
|
61
|
-
- [ ] 接口与状态完整。
|
|
62
|
-
- [ ] 测试、示例和 a11y 齐全。
|
|
63
|
-
|
|
64
|
-
## Examples
|
|
65
|
-
|
|
66
|
-
### 内容示例,可删除
|
|
67
|
-
|
|
68
|
-
业务状态标签放领域层,基础 Tag 只负责通用视觉和语义。
|
|
69
|
-
|
|
70
|
-
## Anti-patterns
|
|
71
|
-
|
|
72
|
-
创建 `CommonTable2`,接收任意对象并在内部请求多个业务 API。
|
|
73
|
-
|
|
74
|
-
## Ownership
|
|
75
|
-
|
|
76
|
-
组件 Owner 维护 contract,调用方遵守公开 API,Design System Owner 维护基础组件视觉。
|
|
77
|
-
|
|
78
|
-
## Change Policy
|
|
79
|
-
|
|
80
|
-
公共 API 变化遵循影响评估、兼容、deprecated、迁移和删除周期。
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/25-page-structure-protocol.md
|
|
3
|
-
seed_source_sha256: 5fb926a798842262d7f87555e3e63e104c868a401eb27f3c1f899e677fdf5f4f
|
|
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
|
-
# 25 页面结构协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义列表、详情、报表、工作台等页面类型的固定区域、顺序和交互容器。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
不定义组件内部 API、具体视觉 token 或业务字段。
|
|
22
|
-
|
|
23
|
-
## Terms
|
|
24
|
-
|
|
25
|
-
- Page Type:有稳定目标和结构的页面类别。
|
|
26
|
-
- Page Contract:页面 key、结构、权限、状态和导航契约。
|
|
27
|
-
- Region:Header、Context、Search、Toolbar、Main、SidePanel、Footer 等区域。
|
|
28
|
-
|
|
29
|
-
## MUST
|
|
30
|
-
|
|
31
|
-
- 新页面先选择 Page Type 和 Page Contract。
|
|
32
|
-
- 每类页面定义标题、面包屑、筛选、工具栏、主体、分页和详情位置。
|
|
33
|
-
- 主次操作、批量操作和状态信息位置一致。
|
|
34
|
-
- 抽屉、弹窗和路由跳转有选择规则。
|
|
35
|
-
- 同类页面共性问题在共享结构层修复。
|
|
36
|
-
|
|
37
|
-
## MUST NOT
|
|
38
|
-
|
|
39
|
-
- MUST NOT 新页面临场创造区域顺序。
|
|
40
|
-
- MUST NOT 把筛选、操作、表格和分页揉成不可复用单体。
|
|
41
|
-
- MUST NOT 让不同页面类型共享含糊结构。
|
|
42
|
-
- MUST NOT 绕过 Page Contract 创建路由页面。
|
|
43
|
-
|
|
44
|
-
## SHOULD
|
|
45
|
-
|
|
46
|
-
- SHOULD 使用标准 PageShell 和区域组件。
|
|
47
|
-
- SHOULD 让上下文、状态和恢复路径可见。
|
|
48
|
-
|
|
49
|
-
## Contract
|
|
50
|
-
|
|
51
|
-
```text
|
|
52
|
-
PageKey, PageType, Regions[], PrimaryActions[],
|
|
53
|
-
Permissions[], States[], Navigation, Owner
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Checklist
|
|
57
|
-
|
|
58
|
-
- [ ] 页面已归类。
|
|
59
|
-
- [ ] 区域顺序正确。
|
|
60
|
-
- [ ] 操作、状态和导航完整。
|
|
61
|
-
- [ ] 同类页面使用共享结构。
|
|
62
|
-
|
|
63
|
-
## Examples
|
|
64
|
-
|
|
65
|
-
### 内容示例,可删除
|
|
66
|
-
|
|
67
|
-
标准列表页按 Header、Search、Toolbar、Table、Pagination、Drawer 排列。
|
|
68
|
-
|
|
69
|
-
## Anti-patterns
|
|
70
|
-
|
|
71
|
-
每个 CRUD 页面复制一套不同筛选和按钮顺序,逐渐产生不一致。
|
|
72
|
-
|
|
73
|
-
## Ownership
|
|
74
|
-
|
|
75
|
-
UX/前端架构 Owner 维护 Page Type,领域 Owner 维护具体 Page Contract。
|
|
76
|
-
|
|
77
|
-
## Change Policy
|
|
78
|
-
|
|
79
|
-
新增 Page Type 需证明现有类型不能覆盖,并评估所有同类页面和迁移。
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/26-style-layout-protocol.md
|
|
3
|
-
seed_source_sha256: a66b216ca119c7296431233fb2bb6db9affd1f71ba011e5394aaaafdab9e8240
|
|
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
|
-
# 26 样式与布局协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义 CSS 组织、尺寸职责、溢出、层级、响应式、第三方覆盖和布局稳定。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
不定义品牌色值、页面业务结构或组件 API。
|
|
22
|
-
|
|
23
|
-
## Terms
|
|
24
|
-
|
|
25
|
-
- Layout Owner:负责外层尺寸和区域关系的容器。
|
|
26
|
-
- Content Owner:负责内部内容排布的组件。
|
|
27
|
-
- Stable Dimension:动态状态下不引发布局跳动的尺寸约束。
|
|
28
|
-
|
|
29
|
-
## MUST
|
|
30
|
-
|
|
31
|
-
- 明确全局、组件、主题和第三方样式边界。
|
|
32
|
-
- 外层负责布局与 overflow,内层不得反向撑爆。
|
|
33
|
-
- 固定格式控件定义稳定尺寸、min/max 或比例。
|
|
34
|
-
- 文本换行、截断、tooltip 和横向滚动有统一规则。
|
|
35
|
-
- z-index 只能来自层级 token。
|
|
36
|
-
- 响应式断点和密度切换有验收矩阵。
|
|
37
|
-
|
|
38
|
-
## MUST NOT
|
|
39
|
-
|
|
40
|
-
- MUST NOT 为单页问题修改全局 CSS。
|
|
41
|
-
- MUST NOT 依赖特定父 DOM 才能正常显示。
|
|
42
|
-
- MUST NOT 使用孤立 magic number、无来源 z-index 和随意 `!important`。
|
|
43
|
-
- MUST NOT 通过缩小字体掩盖溢出。
|
|
44
|
-
|
|
45
|
-
## SHOULD
|
|
46
|
-
|
|
47
|
-
- SHOULD 优先使用标准 layout primitives。
|
|
48
|
-
- SHOULD 集中第三方样式适配。
|
|
49
|
-
|
|
50
|
-
## Contract
|
|
51
|
-
|
|
52
|
-
```text
|
|
53
|
-
Container, SizeOwner, OverflowPolicy, MinMax,
|
|
54
|
-
BreakpointBehavior, ZIndexToken, TextPolicy
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Checklist
|
|
58
|
-
|
|
59
|
-
- [ ] 尺寸责任明确。
|
|
60
|
-
- [ ] 长文本和小屏不破坏布局。
|
|
61
|
-
- [ ] 层级和第三方覆盖集中。
|
|
62
|
-
- [ ] 动态状态无跳动。
|
|
63
|
-
|
|
64
|
-
## Examples
|
|
65
|
-
|
|
66
|
-
### 内容示例,可删除
|
|
67
|
-
|
|
68
|
-
页面容器管理横向滚动,表格声明最小内容宽度,单元格不硬编码页面宽度。
|
|
69
|
-
|
|
70
|
-
## Anti-patterns
|
|
71
|
-
|
|
72
|
-
为修复一个弹窗把全局 z-index 提到极大值,随后所有 dropdown 层级失控。
|
|
73
|
-
|
|
74
|
-
## Ownership
|
|
75
|
-
|
|
76
|
-
Design System Owner 维护 token,Layout Owner 维护区域,组件 Owner 维护内部样式。
|
|
77
|
-
|
|
78
|
-
## Change Policy
|
|
79
|
-
|
|
80
|
-
全局布局和层级变化必须评估全部页面类型并执行视觉回归。
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/27-rendering-state-protocol.md
|
|
3
|
-
seed_source_sha256: a640bacd811e05a35075d96ffb99ba51b8b6e11cc2a5443e3bbca0eb124738e4
|
|
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
|
-
# 27 渲染状态协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义 loading、refreshing、empty、error、permission、partial、offline、stale 和大数据状态。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
不定义后端错误码、业务状态机和具体文案风格。
|
|
22
|
-
|
|
23
|
-
## Terms
|
|
24
|
-
|
|
25
|
-
- Initial Loading:首次无可用内容加载。
|
|
26
|
-
- Background Refresh:保留已有内容的刷新。
|
|
27
|
-
- Partial Success:部分对象成功、部分失败。
|
|
28
|
-
- Stale Data:仍可展示但可能过期的数据。
|
|
29
|
-
|
|
30
|
-
## MUST
|
|
31
|
-
|
|
32
|
-
- 页面覆盖非理想状态并定义优先级。
|
|
33
|
-
- 首屏骨架保持主要布局尺寸。
|
|
34
|
-
- empty 区分无数据与筛选无结果。
|
|
35
|
-
- error、permission 和 offline 提供恢复动作。
|
|
36
|
-
- partial success 提供成功/失败/跳过数量和明细。
|
|
37
|
-
- 弹层声明销毁、保留、dirty 和关闭策略。
|
|
38
|
-
|
|
39
|
-
## MUST NOT
|
|
40
|
-
|
|
41
|
-
- MUST NOT 只实现成功有数据状态。
|
|
42
|
-
- MUST NOT 后台刷新时清空已有内容。
|
|
43
|
-
- MUST NOT 用 Toast 代替页面或字段状态。
|
|
44
|
-
- MUST NOT 错误后不给恢复入口。
|
|
45
|
-
|
|
46
|
-
## SHOULD
|
|
47
|
-
|
|
48
|
-
- SHOULD 使用统一状态组件并允许领域化内容。
|
|
49
|
-
- SHOULD 对 stale 和离线数据标识更新时间。
|
|
50
|
-
|
|
51
|
-
## Contract
|
|
52
|
-
|
|
53
|
-
```text
|
|
54
|
-
State, Priority, Presentation, RecoverAction,
|
|
55
|
-
LayoutReservation, AccessibilityAnnouncement
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Checklist
|
|
59
|
-
|
|
60
|
-
- [ ] 状态矩阵完整。
|
|
61
|
-
- [ ] 优先级无冲突。
|
|
62
|
-
- [ ] 恢复动作可用。
|
|
63
|
-
- [ ] 布局和焦点稳定。
|
|
64
|
-
|
|
65
|
-
## Examples
|
|
66
|
-
|
|
67
|
-
### 内容示例,可删除
|
|
68
|
-
|
|
69
|
-
后台刷新保留表格行,只在工具栏显示轻量进度;失败后仍可查看旧数据。
|
|
70
|
-
|
|
71
|
-
## Anti-patterns
|
|
72
|
-
|
|
73
|
-
每次翻页都整页白屏,错误后只弹一次 Toast 且无法重试。
|
|
74
|
-
|
|
75
|
-
## Ownership
|
|
76
|
-
|
|
77
|
-
页面 Owner 维护状态矩阵,Design System Owner 维护状态组件,API Owner 提供必要信息。
|
|
78
|
-
|
|
79
|
-
## Change Policy
|
|
80
|
-
|
|
81
|
-
新增状态必须更新页面 contract、组件、文案、可访问性和测试。
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/28-form-protocol.md
|
|
3
|
-
seed_source_sha256: 1359f0b753ece0f633b1aadea11e4ffd03dfc38f5b1f59e8cd869eba502e4807
|
|
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
|
-
# 28 表单协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义表单布局、模型、校验、联动、提交、回显、草稿、错误和冲突。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
不定义具体业务字段和后端权威规则,不替代页面结构。
|
|
22
|
-
|
|
23
|
-
## Terms
|
|
24
|
-
|
|
25
|
-
- FormModel:独立于 DTO 的编辑模型。
|
|
26
|
-
- Dirty State:当前值偏离初始值。
|
|
27
|
-
- Field Error:绑定具体字段的错误。
|
|
28
|
-
|
|
29
|
-
## MUST
|
|
30
|
-
|
|
31
|
-
- 使用独立 FormModel 和 typed schema。
|
|
32
|
-
- 必填、只读、自动计算、回填和无权限字段可区分。
|
|
33
|
-
- 前端先做格式校验,后端字段错误定位并聚焦字段。
|
|
34
|
-
- 提交防重复并保留失败输入。
|
|
35
|
-
- 联动规则集中可测试,隐藏字段清值策略明确。
|
|
36
|
-
- dirty 离开、草稿隔离和版本冲突有策略。
|
|
37
|
-
- 每个输入必须有持久可见且程序化关联的标签、格式说明和必要性提示;placeholder 不得替代标签。
|
|
38
|
-
- 校验错误必须与字段程序化关联,并在可行时给出修复建议;错误摘要必须能导航到对应字段。
|
|
39
|
-
- 姓名、地址、联系方式、认证等常见字段必须使用语义正确的 autocomplete/inputmode 等浏览器提示,除非有明确的安全或业务理由。
|
|
40
|
-
- 同一流程已提供的数据必须复用或允许用户确认,避免重复录入;删除、提交、转账等高风险动作必须提供复核、确认、撤销或等效防错。
|
|
41
|
-
|
|
42
|
-
## MUST NOT
|
|
43
|
-
|
|
44
|
-
- MUST NOT 直接绑定 DTO。
|
|
45
|
-
- MUST NOT 在 template 临时写业务校验。
|
|
46
|
-
- MUST NOT 提交失败清空输入。
|
|
47
|
-
- MUST NOT 用大量互相触发 watcher 实现联动。
|
|
48
|
-
- MUST NOT 只用颜色、图标、toast 或页面顶部文案表达字段错误。
|
|
49
|
-
- MUST NOT 禁止密码管理器或无理由阻止粘贴。
|
|
50
|
-
|
|
51
|
-
## SHOULD
|
|
52
|
-
|
|
53
|
-
- SHOULD 大表单按业务语义分区或分步。
|
|
54
|
-
- SHOULD 提供错误摘要和首错导航。
|
|
55
|
-
|
|
56
|
-
## Contract
|
|
57
|
-
|
|
58
|
-
```text
|
|
59
|
-
FormModel, Schema, InitialValues, Validation,
|
|
60
|
-
SubmitCommand, DraftPolicy, DirtyPolicy, ConflictPolicy
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Checklist
|
|
64
|
-
|
|
65
|
-
- [ ] 模型和 schema 独立。
|
|
66
|
-
- [ ] 字段错误可定位。
|
|
67
|
-
- [ ] 防重复与冲突完整。
|
|
68
|
-
- [ ] 草稿和离开策略安全。
|
|
69
|
-
- [ ] 标签、说明、错误和字段程序化关联。
|
|
70
|
-
- [ ] 自动填充、重复录入和高风险动作已检查。
|
|
71
|
-
|
|
72
|
-
## Examples
|
|
73
|
-
|
|
74
|
-
### 内容示例,可删除
|
|
75
|
-
|
|
76
|
-
后端 422 字段错误映射到对应输入,保留用户数据并聚焦第一个错误。
|
|
77
|
-
|
|
78
|
-
## Anti-patterns
|
|
79
|
-
|
|
80
|
-
表单直接修改 DTO,失败后 reset,用户输入全部丢失。
|
|
81
|
-
|
|
82
|
-
## Ownership
|
|
83
|
-
|
|
84
|
-
领域 Owner 维护字段规则,前端 Owner 维护 FormModel,后端 Owner 维护权威校验。
|
|
85
|
-
|
|
86
|
-
## Change Policy
|
|
87
|
-
|
|
88
|
-
字段或联动变化必须同步 schema、adapter、草稿版本、错误映射和测试。
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
seed_source: pomaster/components/frontend-hard-spec/assets/universal/29-routing-url-protocol.md
|
|
3
|
-
seed_source_sha256: 3066c383489e1cb72271fe48d4a716860c58381d90e46ee1b2f114c61010949e
|
|
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
|
-
# 29 路由与 URL 协议
|
|
14
|
-
|
|
15
|
-
## Scope
|
|
16
|
-
|
|
17
|
-
P1。定义路由命名、参数、URL 状态、返回恢复、守卫和异常页面。
|
|
18
|
-
|
|
19
|
-
## Non-Scope
|
|
20
|
-
|
|
21
|
-
不定义页面内部布局、权限来源和全局状态库。
|
|
22
|
-
|
|
23
|
-
## Terms
|
|
24
|
-
|
|
25
|
-
- Route Contract:name、path、meta 和页面 key 的稳定定义。
|
|
26
|
-
- Shareable State:刷新、分享、返回后应恢复的状态。
|
|
27
|
-
- Ephemeral State:弹窗、hover、未提交输入等临时状态。
|
|
28
|
-
|
|
29
|
-
## MUST
|
|
30
|
-
|
|
31
|
-
- 每个页面路由有稳定 name、path、page key、title、权限和布局 meta。
|
|
32
|
-
- 分页、筛选、排序、tab 等 Shareable State 进入 URL。
|
|
33
|
-
- Query 有 schema、默认值、解析失败兜底和版本策略。
|
|
34
|
-
- 返回恢复分页、筛选、排序和必要视图状态。
|
|
35
|
-
- 401、403、404、500 和资源删除有统一路由策略。
|
|
36
|
-
|
|
37
|
-
## MUST NOT
|
|
38
|
-
|
|
39
|
-
- MUST NOT 把 token、敏感信息、大对象和未提交表单放入 URL。
|
|
40
|
-
- MUST NOT 用标题字符串或 URL 截取判断菜单。
|
|
41
|
-
- MUST NOT 在页面直接修改全局路由表。
|
|
42
|
-
- MUST NOT 改 path/name 而不更新调用方。
|
|
43
|
-
|
|
44
|
-
## SHOULD
|
|
45
|
-
|
|
46
|
-
- SHOULD 由 Page Contract 生成路由、菜单和埋点关联。
|
|
47
|
-
- SHOULD 使用 typed query parser。
|
|
48
|
-
|
|
49
|
-
## Contract
|
|
50
|
-
|
|
51
|
-
```text
|
|
52
|
-
RouteName, Path, PageKey, Meta, ParamsSchema,
|
|
53
|
-
QuerySchema, RestorePolicy, ErrorRoutes
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Checklist
|
|
57
|
-
|
|
58
|
-
- [ ] 路由和页面 key 一致。
|
|
59
|
-
- [ ] URL 状态可分享恢复。
|
|
60
|
-
- [ ] 临时/敏感状态未进入 URL。
|
|
61
|
-
- [ ] 异常路由完整。
|
|
62
|
-
|
|
63
|
-
## Examples
|
|
64
|
-
|
|
65
|
-
### 内容示例,可删除
|
|
66
|
-
|
|
67
|
-
列表分页筛选写入 query,返回列表时按 URL 恢复,不依赖全局临时 store。
|
|
68
|
-
|
|
69
|
-
## Anti-patterns
|
|
70
|
-
|
|
71
|
-
用中文标题匹配当前菜单,将所有页面筛选永久存入全局状态。
|
|
72
|
-
|
|
73
|
-
## Ownership
|
|
74
|
-
|
|
75
|
-
平台路由 Owner 维护机制,页面 Owner 维护 Route Contract,权限 Owner 维护守卫语义。
|
|
76
|
-
|
|
77
|
-
## Change Policy
|
|
78
|
-
|
|
79
|
-
路由破坏性变化必须提供重定向、链接迁移和监控观察期。
|