pomaster 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -15
- 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 +10121 -6733
- 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
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
seed_source: packages/cli/seeds/aggregation-manifest.json
|
|
3
|
+
seed_source_sha256: 039b637ccffacdfe3ce30d85e193f4b38928fcdfb16efdc4eb255e35e05af91f
|
|
4
|
+
seed_version: B7-THEME
|
|
5
|
+
lane: [frontend, backend]
|
|
6
|
+
status: CURRENT
|
|
7
|
+
authority_scope: mixed_required_and_advisory
|
|
8
|
+
applies_to: [frontend, backend]
|
|
9
|
+
related_evidence_specs: []
|
|
10
|
+
related_tools: []
|
|
11
|
+
legacy_id: theme:release-and-feature-flags
|
|
12
|
+
criticality: critical # 聚合注记:取源最高;info 性注记非执行语义
|
|
13
|
+
injection_mode: triggered # 聚合注记:来源同值;info 性注记非执行语义
|
|
14
|
+
stages: [prepare, check, release] # 聚合注记:来源 stages 并集;info 性注记非执行语义
|
|
15
|
+
triggers: [release, rollback, versioning] # 聚合注记:来源 triggers 并集;info 性注记非执行语义
|
|
16
|
+
requires: [] # 聚合注记:来源 requires 并集(全空)
|
|
17
|
+
x-aggregation: # 聚合来源(D6):逐源 vendor pin(sha256 与卡 vendor_pin 同值)
|
|
18
|
+
- seed_source: pomaster/components/frontend-hard-spec/assets/universal/33-release-versioning-protocol.md
|
|
19
|
+
sha256: aae0557f4935bac24d04e37ebde5638471b709ff568fea0d13de35bd5dd404af
|
|
20
|
+
seed_version: B6B-2
|
|
21
|
+
- seed_source: pomaster/components/frontend-hard-spec/assets/universal/36-feature-flag-protocol.md
|
|
22
|
+
sha256: ba6cf2d5607ba54d9864cd6c07899d2e13a8d33ea248fbd7469b92c23474f474
|
|
23
|
+
seed_version: B6B-2
|
|
24
|
+
- seed_source: pomaster/components/backend-hard-spec/assets/universal/32-release-versioning-rollback-protocol.md
|
|
25
|
+
sha256: 26a6a23928fc24338f69fb34199ecdea5f654e21534a76ac53a7c0b78030b3c8
|
|
26
|
+
seed_version: B6C
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# 发布与开关
|
|
30
|
+
|
|
31
|
+
> **聚合纪律**:本文档 12 节正文规则行逐字取自 frontmatter x-aggregation 所列来源协议(节内按「端 → 源编号升序」以加粗来源行分块,源内标题与层级原样保留),零新增、零改写、零删除;新增文本仅限文档标题、本注记与逐节来源行。
|
|
32
|
+
|
|
33
|
+
## Scope
|
|
34
|
+
|
|
35
|
+
**源:FE 33 版本与发布协议(pomaster/components/frontend-hard-spec/assets/universal/33-release-versioning-protocol.md)**
|
|
36
|
+
|
|
37
|
+
P2。定义版本标识、分支/提交、灰度、回滚、公共 API 兼容和发布证据。
|
|
38
|
+
|
|
39
|
+
**源:FE 36 Feature Flag 协议(pomaster/components/frontend-hard-spec/assets/universal/36-feature-flag-protocol.md)**
|
|
40
|
+
|
|
41
|
+
P2。定义功能开关来源、命名、灰度范围、关闭表现、默认值和生命周期。
|
|
42
|
+
|
|
43
|
+
**源:BE 32 发布、版本与回滚协议(pomaster/components/backend-hard-spec/assets/universal/32-release-versioning-rollback-protocol.md)**
|
|
44
|
+
|
|
45
|
+
规范版本、灰度、开关、发布记录、兼容窗口、回滚和数据库演进。
|
|
46
|
+
|
|
47
|
+
## Non-Scope
|
|
48
|
+
|
|
49
|
+
**源:FE 33 版本与发布协议**
|
|
50
|
+
|
|
51
|
+
不替代验收门禁、组织发布平台和基础设施部署流程。
|
|
52
|
+
|
|
53
|
+
**源:FE 36 Feature Flag 协议**
|
|
54
|
+
|
|
55
|
+
不替代权限、业务状态和环境配置。
|
|
56
|
+
|
|
57
|
+
**源:BE 32 发布、版本与回滚协议**
|
|
58
|
+
|
|
59
|
+
不替代具体平台操作手册或证据验收协议。
|
|
60
|
+
|
|
61
|
+
## Terms
|
|
62
|
+
|
|
63
|
+
**源:FE 33 版本与发布协议**
|
|
64
|
+
|
|
65
|
+
- App Version:可关联提交、构建、环境和 source map 的版本。
|
|
66
|
+
- Gray Release:受控用户/环境范围内逐步发布。
|
|
67
|
+
- Rollback:恢复到已验证版本和兼容状态。
|
|
68
|
+
|
|
69
|
+
**源:FE 36 Feature Flag 协议**
|
|
70
|
+
|
|
71
|
+
- Flag Key:稳定唯一的开关键。
|
|
72
|
+
- Targeting:按环境、用户、角色或组织控制命中。
|
|
73
|
+
- Kill Switch:紧急关闭新能力的开关。
|
|
74
|
+
|
|
75
|
+
**源:BE 32 发布、版本与回滚协议**
|
|
76
|
+
|
|
77
|
+
可回退包括代码回滚、配置恢复、流量撤回和数据 roll-forward 的组合能力。
|
|
78
|
+
|
|
79
|
+
## MUST
|
|
80
|
+
|
|
81
|
+
**源:FE 33 版本与发布协议 · §MUST**
|
|
82
|
+
|
|
83
|
+
- 每个构建有可观测版本和来源。
|
|
84
|
+
- 发布前契约、测试、安全、配置、监控和回滚满足门禁。
|
|
85
|
+
- 高风险变更定义灰度和停止条件。
|
|
86
|
+
- 回滚同时考虑前端资源、接口、缓存、任务和数据兼容。
|
|
87
|
+
- 公共 breaking change 先 deprecated 并提供迁移期。
|
|
88
|
+
|
|
89
|
+
**源:FE 36 Feature Flag 协议 · §MUST**
|
|
90
|
+
|
|
91
|
+
- 每个 flag 有 owner、目的、默认值、目标范围、期限和清理日期。
|
|
92
|
+
- 入口、路由和后台请求在关闭时一致停用。
|
|
93
|
+
- 获取失败使用保守默认值。
|
|
94
|
+
- Flag 与权限同时通过才允许操作。
|
|
95
|
+
- 全量稳定后删除临时判断和旧路径。
|
|
96
|
+
|
|
97
|
+
**源:BE 32 发布、版本与回滚协议 · §MUST**
|
|
98
|
+
|
|
99
|
+
- 发布前必须确认版本、依赖顺序、兼容、观测、停止条件和恢复路径。
|
|
100
|
+
|
|
101
|
+
## MUST NOT
|
|
102
|
+
|
|
103
|
+
**源:FE 33 版本与发布协议 · §MUST NOT**
|
|
104
|
+
|
|
105
|
+
- MUST NOT 无版本标识发布。
|
|
106
|
+
- MUST NOT 无回滚上线破坏性变化。
|
|
107
|
+
- MUST NOT 直接删除公共 API。
|
|
108
|
+
- MUST NOT 发布后才补监控和 source map。
|
|
109
|
+
|
|
110
|
+
**源:FE 36 Feature Flag 协议 · §MUST NOT**
|
|
111
|
+
|
|
112
|
+
- MUST NOT 在多个页面手写同一判断。
|
|
113
|
+
- MUST NOT 将 flag 当权限或业务状态。
|
|
114
|
+
- MUST NOT 使用无 owner、无期限的永久临时 flag。
|
|
115
|
+
- MUST NOT 关闭 UI 却继续触发后台请求。
|
|
116
|
+
|
|
117
|
+
**源:BE 32 发布、版本与回滚协议 · §MUST NOT**
|
|
118
|
+
|
|
119
|
+
- 不得在无法恢复数据或无监控信号时进行不可逆全量发布。
|
|
120
|
+
|
|
121
|
+
## SHOULD
|
|
122
|
+
|
|
123
|
+
**源:FE 33 版本与发布协议 · §SHOULD**
|
|
124
|
+
|
|
125
|
+
- SHOULD 自动生成变更摘要和发布证据。
|
|
126
|
+
- SHOULD 使用 Feature Flag 降低高风险上线范围。
|
|
127
|
+
|
|
128
|
+
**源:FE 36 Feature Flag 协议 · §SHOULD**
|
|
129
|
+
|
|
130
|
+
- SHOULD 支持灰度、回滚、监控和实验审计。
|
|
131
|
+
- SHOULD 对关键写操作提供 kill switch。
|
|
132
|
+
|
|
133
|
+
**源:BE 32 发布、版本与回滚协议 · §SHOULD**
|
|
134
|
+
|
|
135
|
+
- 应采用小批量灰度、可撤回开关和前后版本并行兼容。
|
|
136
|
+
|
|
137
|
+
## Contract
|
|
138
|
+
|
|
139
|
+
**源:FE 33 版本与发布协议 · §Contract**
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
Version, Commit, BuildTime, Environment, Changes,
|
|
143
|
+
Flags, Migration, Monitoring, Rollback, Owner
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**源:FE 36 Feature Flag 协议 · §Contract**
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
FlagKey, Owner, Default, Targeting, Fallback,
|
|
150
|
+
StartAt, EndAt, CleanupAt, Metrics
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**源:BE 32 发布、版本与回滚协议 · §Contract**
|
|
154
|
+
|
|
155
|
+
发布记录必须包含变更范围、产物 hash、步骤、门禁、指标、Owner 与结果。
|
|
156
|
+
|
|
157
|
+
## Checklist
|
|
158
|
+
|
|
159
|
+
**源:FE 33 版本与发布协议 · §Checklist**
|
|
160
|
+
|
|
161
|
+
- [ ] 版本可追踪。
|
|
162
|
+
- [ ] 门禁和契约通过。
|
|
163
|
+
- [ ] 灰度与回滚可执行。
|
|
164
|
+
- [ ] deprecated/迁移完整。
|
|
165
|
+
|
|
166
|
+
**源:FE 36 Feature Flag 协议 · §Checklist**
|
|
167
|
+
|
|
168
|
+
- [ ] 默认和失败行为安全。
|
|
169
|
+
- [ ] UI/路由/请求一致。
|
|
170
|
+
- [ ] 不绕过权限。
|
|
171
|
+
- [ ] 有清理日期。
|
|
172
|
+
|
|
173
|
+
**源:BE 32 发布、版本与回滚协议 · §Checklist**
|
|
174
|
+
|
|
175
|
+
- [ ] 应用、数据库、配置、消息、缓存与消费者版本已对齐。
|
|
176
|
+
|
|
177
|
+
## Examples
|
|
178
|
+
|
|
179
|
+
**源:FE 33 版本与发布协议 · §Examples**
|
|
180
|
+
|
|
181
|
+
### 内容示例,可删除
|
|
182
|
+
|
|
183
|
+
公共组件新 API 与旧 API 并存一个迁移周期,再在版本公告后删除旧 API。
|
|
184
|
+
|
|
185
|
+
**源:FE 36 Feature Flag 协议 · §Examples**
|
|
186
|
+
|
|
187
|
+
### 内容示例,可删除
|
|
188
|
+
|
|
189
|
+
新编辑器 flag 关闭后回到旧编辑器,相关新 API 不再调用。
|
|
190
|
+
|
|
191
|
+
**源:BE 32 发布、版本与回滚协议 · §Examples**
|
|
192
|
+
|
|
193
|
+
- 先发布兼容读写版本,完成数据迁移后再清理旧契约。
|
|
194
|
+
|
|
195
|
+
## Anti-patterns
|
|
196
|
+
|
|
197
|
+
**源:FE 33 版本与发布协议 · §Anti-patterns**
|
|
198
|
+
|
|
199
|
+
静态资源已回滚,但新缓存 schema 和后台任务仍不兼容旧页面。
|
|
200
|
+
|
|
201
|
+
**源:FE 36 Feature Flag 协议 · §Anti-patterns**
|
|
202
|
+
|
|
203
|
+
组件中散落环境判断,开关关闭后深链接仍能访问新功能。
|
|
204
|
+
|
|
205
|
+
**源:BE 32 发布、版本与回滚协议 · §Anti-patterns**
|
|
206
|
+
|
|
207
|
+
- 把数据库回滚等同于逆向执行破坏性 migration。
|
|
208
|
+
|
|
209
|
+
## Ownership
|
|
210
|
+
|
|
211
|
+
**源:FE 33 版本与发布协议 · §Ownership**
|
|
212
|
+
|
|
213
|
+
发布 Owner 负责流程,模块 Owner 负责兼容,平台 Owner 负责回滚和监控。
|
|
214
|
+
|
|
215
|
+
**源:FE 36 Feature Flag 协议 · §Ownership**
|
|
216
|
+
|
|
217
|
+
功能 Owner 维护业务生命周期,平台 Owner 维护系统,安全/权限 Owner 审查边界。
|
|
218
|
+
|
|
219
|
+
**源:BE 32 发布、版本与回滚协议 · §Ownership**
|
|
220
|
+
|
|
221
|
+
发布责任人执行门禁,Backend 提供兼容与恢复证据。
|
|
222
|
+
|
|
223
|
+
## Change Policy
|
|
224
|
+
|
|
225
|
+
**源:FE 33 版本与发布协议 · §Change Policy**
|
|
226
|
+
|
|
227
|
+
版本和发布策略变化必须同步 CI/CD、门禁、文档和责任人。
|
|
228
|
+
|
|
229
|
+
**源:FE 36 Feature Flag 协议 · §Change Policy**
|
|
230
|
+
|
|
231
|
+
Flag 语义和目标规则变化必须记录;转长期配置时迁移到正式配置系统。
|
|
232
|
+
|
|
233
|
+
**源:BE 32 发布、版本与回滚协议 · §Change Policy**
|
|
234
|
+
|
|
235
|
+
发布流程和阻断门禁变化必须通过演练与审计后生效。
|
|
236
|
+
|
|
237
|
+
> **语言节**:本主题无语言节挂点(缺席诚实);规则本体即上文通用节。
|
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
---
|
|
2
|
-
seed_source:
|
|
3
|
-
seed_source_sha256:
|
|
4
|
-
seed_version:
|
|
5
|
-
lane: frontend
|
|
2
|
+
seed_source: packages/cli/seeds/aggregation-manifest.json
|
|
3
|
+
seed_source_sha256: 039b637ccffacdfe3ce30d85e193f4b38928fcdfb16efdc4eb255e35e05af91f
|
|
4
|
+
seed_version: B7-THEME
|
|
5
|
+
lane: [frontend, backend]
|
|
6
6
|
status: CURRENT
|
|
7
7
|
authority_scope: mixed_required_and_advisory
|
|
8
|
-
applies_to: [frontend]
|
|
8
|
+
applies_to: [frontend, backend]
|
|
9
9
|
related_evidence_specs: []
|
|
10
10
|
related_tools: []
|
|
11
|
+
legacy_id: theme:security
|
|
12
|
+
criticality: critical # 聚合注记:取源最高;info 性注记非执行语义
|
|
13
|
+
injection_mode: triggered # 聚合注记:来源同值;info 性注记非执行语义
|
|
14
|
+
stages: [prepare, implement, check, release] # 聚合注记:来源 stages 并集;info 性注记非执行语义
|
|
15
|
+
triggers: [security, api-input, authentication, authorization, file-processing, secrets] # 聚合注记:来源 triggers 并集;info 性注记非执行语义
|
|
16
|
+
requires: [] # 聚合注记:来源 requires 并集(全空)
|
|
17
|
+
x-aggregation: # 聚合来源(D6):逐源 vendor pin(sha256 与卡 vendor_pin 同值)
|
|
18
|
+
- seed_source: pomaster/components/frontend-hard-spec/assets/universal/04-security-protocol.md
|
|
19
|
+
sha256: 4d9bb6bd34a64fcc3e362c969492bc326533e16ef4c6d2284dc01442733504e6
|
|
20
|
+
seed_version: B6B-1
|
|
21
|
+
- seed_source: pomaster/components/backend-hard-spec/assets/universal/10-security-protocol.md
|
|
22
|
+
sha256: 56387f03edd35df50a5a701f4daab174b744d490663393f43331cf5401149f67
|
|
23
|
+
seed_version: B6C
|
|
11
24
|
---
|
|
12
25
|
|
|
13
|
-
#
|
|
26
|
+
# 安全
|
|
27
|
+
|
|
28
|
+
> **聚合纪律**:本文档 12 节正文规则行逐字取自 frontmatter x-aggregation 所列来源协议(节内按「端 → 源编号升序」以加粗来源行分块,源内标题与层级原样保留),零新增、零改写、零删除;新增文本仅限文档标题、本注记与逐节来源行。
|
|
14
29
|
|
|
15
30
|
## Scope
|
|
16
31
|
|
|
32
|
+
**源:FE 04 安全协议(pomaster/components/frontend-hard-spec/assets/universal/04-security-protocol.md)**
|
|
33
|
+
|
|
17
34
|
P0。从访问控制与威胁防御视角约束前端代码:XSS/CSRF/CSP、认证/token 生命周期、授权边界、输入校验、敏感数据脱敏、依赖与供应链、传输安全、第三方脚本/iframe/postMessage、客户端存储、错误信息泄露。本协议聚焦前端/客户端可治理项;后端安全、基础设施安全、隐私政策与组织安全流程不替代。
|
|
18
35
|
|
|
19
36
|
与 `universal:16-error-handling-protocol` 的边界:安全只审计错误信息泄露风险,完整错误处理策略见 16。
|
|
@@ -22,12 +39,24 @@ P0。从访问控制与威胁防御视角约束前端代码:XSS/CSRF/CSP、认
|
|
|
22
39
|
与 `universal:44-privacy-data-lifecycle-protocol` 的边界:数据是否该收集、保留多久由 44 负责,安全负责防止未授权访问与脱敏。
|
|
23
40
|
与 `universal:45-browser-storage-protocol` 的边界:存储介质选择与隔离策略由 45 负责,安全负责凭据/敏感数据不得持久化到脚本可读存储。
|
|
24
41
|
|
|
42
|
+
**源:BE 10 安全协议(pomaster/components/backend-hard-spec/assets/universal/10-security-protocol.md)**
|
|
43
|
+
|
|
44
|
+
规范认证、鉴权、输入与文件校验、注入防护、密钥和安全默认值。
|
|
45
|
+
|
|
25
46
|
## Non-Scope
|
|
26
47
|
|
|
48
|
+
**源:FE 04 安全协议**
|
|
49
|
+
|
|
27
50
|
不替代后端鉴权、服务端校验、安全审计、基础设施安全、隐私政策和组织安全流程。
|
|
28
51
|
|
|
52
|
+
**源:BE 10 安全协议**
|
|
53
|
+
|
|
54
|
+
不替代隐私保留规则或具体基础设施加固 Overlay。
|
|
55
|
+
|
|
29
56
|
## Terms
|
|
30
57
|
|
|
58
|
+
**源:FE 04 安全协议**
|
|
59
|
+
|
|
31
60
|
- Threat Defense:防止常见 Web 攻击的纵深防御集合。
|
|
32
61
|
- Dangerous Sink:把字符串解释为 HTML、脚本、URL、CSS 或导航目标的浏览器入口。
|
|
33
62
|
- Sanitization:按白名单清洗不可信内容。
|
|
@@ -37,8 +66,14 @@ P0。从访问控制与威胁防御视角约束前端代码:XSS/CSRF/CSP、认
|
|
|
37
66
|
- Sensitive Data:受隐私、业务或权限保护的数据。
|
|
38
67
|
- SRI:Subresource Integrity,外部资源完整性校验。
|
|
39
68
|
|
|
69
|
+
**源:BE 10 安全协议**
|
|
70
|
+
|
|
71
|
+
信任边界是数据或调用从较低信任域进入较高权限域的位置。
|
|
72
|
+
|
|
40
73
|
## MUST
|
|
41
74
|
|
|
75
|
+
**源:FE 04 安全协议 · §MUST**
|
|
76
|
+
|
|
42
77
|
- 建立项目级安全 Owner,对 12 个安全维度(SEC-01~SEC-12)建立要求、检查点和异常审批流程。
|
|
43
78
|
- 统一定义 token、cookie、CSRF、退出和刷新策略。
|
|
44
79
|
- 所有输入、URL、文件名、消息和 HTML 默认不可信。
|
|
@@ -178,8 +213,14 @@ P0。从访问控制与威胁防御视角约束前端代码:XSS/CSRF/CSP、认
|
|
|
178
213
|
- **feature 层 — 页面级安全**:每个页面声明 CSP/第三方执行/敏感字段/权限守卫需求;页面内 return URL、外链、iframe、postMessage 按白名单执行;错误展示使用归一化文案。MUST NOT 页面单独发明不兼容的 token 存储或错误格式;MUST NOT 页面直接 import 未经清单化的第三方脚本。
|
|
179
214
|
- **shared 层 — 组件与工具安全**:公共组件暴露安全属性(sanitizer_policy、mask_rule、allowed_actions);工具函数提供上下文编码/URL 白名单/敏感字段过滤。MUST NOT 把组件内部调试日志当正式安全审计;MUST NOT 在共享库中硬编码业务 secret 或页面级 capability。
|
|
180
215
|
|
|
216
|
+
**源:BE 10 安全协议 · §MUST**
|
|
217
|
+
|
|
218
|
+
- 所有信任边界必须执行服务端校验、最小权限、失败关闭和安全审计。
|
|
219
|
+
|
|
181
220
|
## MUST NOT
|
|
182
221
|
|
|
222
|
+
**源:FE 04 安全协议 · §MUST NOT**
|
|
223
|
+
|
|
183
224
|
- MUST NOT 渲染未经清洗的 HTML。
|
|
184
225
|
- MUST NOT 将 secret、token 或生产凭据写入源码、URL、日志或公开变量。
|
|
185
226
|
- MUST NOT 将 session identifier、refresh token 或等价凭据持久化到可被脚本读取的存储,除非存在经安全 Owner 批准且有期限的例外。
|
|
@@ -192,8 +233,14 @@ P0。从访问控制与威胁防御视角约束前端代码:XSS/CSRF/CSP、认
|
|
|
192
233
|
- MUST NOT 加载无 SRI/无来源清单的第三方脚本或 iframe。
|
|
193
234
|
- MUST NOT 用 localStorage/sessionStorage 证明身份、权限或同意状态。
|
|
194
235
|
|
|
236
|
+
**源:BE 10 安全协议 · §MUST NOT**
|
|
237
|
+
|
|
238
|
+
- 不得信任前端隐藏、客户端校验、代理头或用户提供的资源归属。
|
|
239
|
+
|
|
195
240
|
## SHOULD
|
|
196
241
|
|
|
242
|
+
**源:FE 04 安全协议 · §SHOULD**
|
|
243
|
+
|
|
197
244
|
- SHOULD 使用由 report-only 逐步收紧到 enforce 的 CSP、受控 sanitizer/Trusted Types、依赖安全扫描和短期下载 URL;CSP 是纵深防御,不能替代输出编码和净化。
|
|
198
245
|
- SHOULD 对外部静态资源使用自托管、完整性校验或受控沙箱,并限制 iframe 能力和未使用的浏览器权限。
|
|
199
246
|
- SHOULD 对高风险输入、文件和权限变化建立专项测试。
|
|
@@ -201,8 +248,14 @@ P0。从访问控制与威胁防御视角约束前端代码:XSS/CSRF/CSP、认
|
|
|
201
248
|
- SHOULD 在 CI 中集成静态安全扫描(eslint-plugin-security / Semgrep)和 SCA。
|
|
202
249
|
- SHOULD 将 security 需求纳入 page-tech-spec §12 非功能需求与运行边界。
|
|
203
250
|
|
|
251
|
+
**源:BE 10 安全协议 · §SHOULD**
|
|
252
|
+
|
|
253
|
+
- 应采用参数化接口、集中密钥管理和可轮换凭据。
|
|
254
|
+
|
|
204
255
|
## Contract
|
|
205
256
|
|
|
257
|
+
**源:FE 04 安全协议 · §Contract**
|
|
258
|
+
|
|
206
259
|
```text
|
|
207
260
|
SecurityRequirement, Scope, Dimension, Priority, Status, Owner,
|
|
208
261
|
SanitizerPolicy, SinkAllowlist, CsrfMechanism, SameSitePolicy, CspMode,
|
|
@@ -229,8 +282,14 @@ feature, 页面级安全, 页面CSP/第三方/敏感字段/权限守卫 + return
|
|
|
229
282
|
shared, 组件与工具安全, 组件安全属性 + 编码/白名单/过滤工具, 调试日志当安全审计 || 硬编码业务secret或capability
|
|
230
283
|
```
|
|
231
284
|
|
|
285
|
+
**源:BE 10 安全协议 · §Contract**
|
|
286
|
+
|
|
287
|
+
安全设计必须列出资产、威胁、控制、失败语义、日志限制和验证证据。
|
|
288
|
+
|
|
232
289
|
## Checklist
|
|
233
290
|
|
|
291
|
+
**源:FE 04 安全协议 · §Checklist**
|
|
292
|
+
|
|
234
293
|
- [ ] 项目级安全 Owner 已指派,12 个维度(SEC-01~SEC-12)要求/检查点/异常审批已建立。
|
|
235
294
|
- [ ] XSS:不可信输入输出编码、危险 sink 管控、富文本 sanitizer/Trusted Types 已确认。
|
|
236
295
|
- [ ] CSRF:状态变更请求带 token、Cookie SameSite/Secure、token 不在 URL。
|
|
@@ -246,8 +305,14 @@ shared, 组件与工具安全, 组件安全属性 + 编码/白名单/过滤工
|
|
|
246
305
|
- [ ] 错误泄露:错误归一化、不暴露堆栈/内部路径/token/PII、监控脱敏。
|
|
247
306
|
- [ ] 分层安全责任已按 app/platform/api/domain/feature/shared 分担。
|
|
248
307
|
|
|
308
|
+
**源:BE 10 安全协议 · §Checklist**
|
|
309
|
+
|
|
310
|
+
- [ ] 认证、鉴权、输入、输出、文件、secret 与审计路径已检查。
|
|
311
|
+
|
|
249
312
|
## Examples
|
|
250
313
|
|
|
314
|
+
**源:FE 04 安全协议 · §Examples**
|
|
315
|
+
|
|
251
316
|
登录表单提交后服务端返回 `HttpOnly; Secure; SameSite=Strict` 的 session cookie;前端在内存中保存短期 access token,refresh token 由后端 Cookie 存储并自动轮换;登出时调用 revoke 接口并触发 BroadcastChannel 清理所有标签页状态。
|
|
252
317
|
|
|
253
318
|
搜索框输入先经前端白名单校验长度/字符集,服务端再次校验;查询参数中的关键字经 URL 编码,渲染到结果列表时经 HTML entity 编码;结果中的富文本由后端给出白名单 HTML,前端使用 DOMPurify 二次清洗并配置 Trusted Types policy。
|
|
@@ -256,8 +321,14 @@ shared, 组件与工具安全, 组件安全属性 + 编码/白名单/过滤工
|
|
|
256
321
|
|
|
257
322
|
第三方客服 widget 必须在第三方执行清单登记,iframe 使用 `sandbox="allow-scripts"` 并限制 `allow` 权限,postMessage 仅向 `https://trusted-cdn.example.com` 发送且接收端校验 origin;widget 停用后立即从 CSP/页面中移除。
|
|
258
323
|
|
|
324
|
+
**源:BE 10 安全协议 · §Examples**
|
|
325
|
+
|
|
326
|
+
- 下载接口同时验证操作权限、数据范围和资源归属。
|
|
327
|
+
|
|
259
328
|
## Anti-patterns
|
|
260
329
|
|
|
330
|
+
**源:FE 04 安全协议 · §Anti-patterns**
|
|
331
|
+
|
|
261
332
|
把 access token 放进 URL 或 localStorage,导致 XSS 可直取凭据。
|
|
262
333
|
|
|
263
334
|
前端按角色名硬编码隐藏按钮,未调用后端鉴权,用户可直接构造请求执行敏感操作。
|
|
@@ -274,10 +345,28 @@ shared, 组件与工具安全, 组件安全属性 + 编码/白名单/过滤工
|
|
|
274
345
|
|
|
275
346
|
HTTPS 页面加载 HTTP 图片/脚本,触发混合内容并绕过 CSP 边界。
|
|
276
347
|
|
|
348
|
+
**源:BE 10 安全协议 · §Anti-patterns**
|
|
349
|
+
|
|
350
|
+
- 把 token、密码或敏感 payload 写入日志与异常。
|
|
351
|
+
|
|
277
352
|
## Ownership
|
|
278
353
|
|
|
354
|
+
**源:FE 04 安全协议 · §Ownership**
|
|
355
|
+
|
|
279
356
|
安全 Owner 负责政策、12 维度基线和异常审批;平台 Owner 负责 CSP/安全头/HTTP client 安全拦截;业务与后端 Owner 负责数据权限与后端强制;前端 Owner 负责页面级安全呈现与组件安全属性;DevOps Owner 负责传输层与证书管理。
|
|
280
357
|
|
|
358
|
+
**源:BE 10 安全协议 · §Ownership**
|
|
359
|
+
|
|
360
|
+
服务端拥有最终安全判断,安全评审者维护阻断门禁。
|
|
361
|
+
|
|
281
362
|
## Change Policy
|
|
282
363
|
|
|
364
|
+
**源:FE 04 安全协议 · §Change Policy**
|
|
365
|
+
|
|
283
366
|
任何安全放宽必须经过风险评估、批准和期限;高危问题修复优先于交互便利性。新增第三方脚本、放宽 CSP、引入新的 token 存储方式、允许敏感字段明文展示或改变默认安全失败模式,必须走 `universal:change-governance-protocol` 的受控变更流程。
|
|
367
|
+
|
|
368
|
+
**源:BE 10 安全协议 · §Change Policy**
|
|
369
|
+
|
|
370
|
+
放宽安全控制必须经过显式风险审批、范围限制和到期复审。
|
|
371
|
+
|
|
372
|
+
> **语言节**:本主题无语言节挂点(缺席诚实);规则本体即上文通用节。
|