feat(web): add phased security rollout ladder

This commit is contained in:
Your Name
2026-05-24 14:49:27 +08:00
parent 22faebcabc
commit a9119561bd
8 changed files with 231 additions and 1 deletions

View File

@@ -361,6 +361,7 @@ def validate(root: Path) -> None:
"s2_107_security_compliance_iwooos_frontstage_bridge",
"s2_108_iwooos_frontstage_security_entry_roles",
"s2_109_security_compliance_frontstage_route_role_map",
"s2_110_security_compliance_low_friction_rollout_ladder",
]
assert_equal(
"progress_delta_ledger.delta_ids",
@@ -630,6 +631,11 @@ def validate(root: Path) -> None:
[item["action_id"] for item in rollup["next_safe_actions"] if isinstance(item, dict)],
"show_security_compliance_frontstage_route_role_map",
)
assert_contains(
"rollup.next_safe_actions.action_ids",
[item["action_id"] for item in rollup["next_safe_actions"] if isinstance(item, dict)],
"show_security_compliance_low_friction_rollout_ladder",
)
assert_contains(
"rollup.next_safe_actions.action_ids",
[item["action_id"] for item in rollup["next_safe_actions"] if isinstance(item, dict)],
@@ -8009,6 +8015,11 @@ def validate(root: Path) -> None:
security_compliance_page,
'data-testid="security-compliance-frontstage-route-role-map"',
)
assert_text_contains(
"security_compliance_page.low_friction_rollout_ladder_testid",
security_compliance_page,
'data-testid="security-compliance-low-friction-rollout-ladder"',
)
assert_text_contains(
"iwooos_page.security_compliance_frontstage_testid",
iwooos_projection_page,
@@ -8050,6 +8061,18 @@ def validate(root: Path) -> None:
security_compliance_page,
text,
)
for text in [
"security_compliance_rollout_phase_count=5",
"security_compliance_rollout_current_phase=observe_first",
"security_compliance_rollout_runtime_phase_enabled=false",
"security_compliance_rollout_enforcement_enabled=false",
"security_compliance_rollout_action_buttons_allowed=false",
]:
assert_text_contains(
"security_compliance_page.low_friction_rollout_boundary",
security_compliance_page,
text,
)
for text in [
"secret_value_collection_allowed=false",
"repo_creation_authorized=false",
@@ -8083,8 +8106,12 @@ def validate(root: Path) -> None:
"routeRoleTitle",
"routeRoleSubtitle",
"routeLabel",
"rolloutTitle",
"rolloutSubtitle",
"phaseLabel",
"items",
"routeRoles",
"rolloutPhases",
]:
assert_contains(
"web_messages.zh-TW.securityCompliance.frontStage.keys",
@@ -8124,6 +8151,23 @@ def validate(root: Path) -> None:
list(web_messages_en["securityCompliance"]["frontStage"]["routeRoles"].keys()),
key,
)
for key in [
"observe",
"evidence",
"humanReview",
"runtimeGate",
"tightening",
]:
assert_contains(
"web_messages.zh-TW.securityCompliance.frontStage.rolloutPhases",
list(web_messages_zh["securityCompliance"]["frontStage"]["rolloutPhases"].keys()),
key,
)
assert_contains(
"web_messages.en.securityCompliance.frontStage.rolloutPhases",
list(web_messages_en["securityCompliance"]["frontStage"]["rolloutPhases"].keys()),
key,
)
assert_contains(
"web_messages.zh-TW.iwooos.securityComplianceFrontStage",
list(web_messages_zh["iwooos"].keys()),