Files
aios/tests/acceptance/gitops-platform-ui.acceptance.json
T
aios 19a2ce8439 feat(V1R2C2): complete autonomous recovery chain integration with 8/8 tests passing
- Integrate ActionMonitor into ChatGPT GitOps API for failure tracking
- Add ErrorClassifier with permission, git, runtime, system, secret violation error types
- Add FailureRouter to route errors to correct recovery agents (openclaw/hermes/windows_codex_app)
- Add RecoveryController orchestrating full pipeline: capture→classify→route→plan→execute→validate→record
- Update error_classifier to include ClientResponseError, rate limit, and secret_violation patterns
- All 8 integration tests passing (ActionMonitor, ErrorClassifier, FailureRouter, RecoveryController, API 500 scenario)
- Push baseline to V1R2C2 with tag v1r2c2-baseline
2026-07-07 19:45:51 +08:00

240 lines
7.0 KiB
JSON

{
"suite": "gitops-platform-ui",
"version": "1.0.0",
"branch_under_test": "patch/web-ui-complete-gitops-dashboard-20260706",
"base_branch": "main",
"purpose": "Validate AIOS GitOps Platform Control Plane UI before merge to main and before V1R1C5 baseline proposal.",
"required_result": "PASS",
"tests": [
{
"id": "STATIC-001",
"group": "static_files",
"required": true,
"description": "Platform UI files exist.",
"assert": {
"files_exist": [
"overlays/user-control-center/portal/gitops-dashboard/index.html",
"overlays/user-control-center/portal/gitops-dashboard/app.js",
"overlays/user-control-center/portal/gitops-dashboard/styles.css",
"overlays/user-control-center/portal/gitops-dashboard/manifest.json",
"overlays/user-control-center/portal/gitops-dashboard/gitops-ui-policy.json",
"overlays/user-control-center/portal/gitops-dashboard/gitops-enterprise-api.contract.json"
]
}
},
{
"id": "STATIC-002",
"group": "static_files",
"required": true,
"description": "Enterprise tabs exist in HTML.",
"assert": {
"file_contains": {
"overlays/user-control-center/portal/gitops-dashboard/index.html": [
"tab-overview",
"tab-rbac",
"tab-approval",
"tab-diff",
"tab-patch",
"tab-model",
"tab-release",
"tab-audit"
]
}
}
},
{
"id": "RUNTIME-001",
"group": "frontend_runtime",
"required": true,
"description": "Platform runtime bootstraps on DOMContentLoaded.",
"assert": {
"file_contains": {
"overlays/user-control-center/portal/gitops-dashboard/app.js": [
"Platform.bootstrap",
"DOMContentLoaded",
"guardAction",
"createApproval",
"renderDiffTree",
"audit(" ,
"redact("
]
}
}
},
{
"id": "SEC-001",
"group": "security",
"required": true,
"description": "No real credentials are committed.",
"assert": {
"secret_scan": {
"paths": [
"overlays/user-control-center/portal/gitops-dashboard",
"docs/codex",
"tests/acceptance",
"scripts",
"skills"
],
"allow_patterns": [
"secret_ref://",
"[REDACTED]",
"api_key_secret_ref",
"forbiddenFields",
"secret_redaction",
"No credentials"
],
"deny_patterns": [
"Bearer [A-Za-z0-9._-]{20,}",
"sk-[A-Za-z0-9]{20,}",
"ghp_[A-Za-z0-9]{20,}",
"AKIA[0-9A-Z]{16}",
"BEGIN PRIVATE KEY",
"BEGIN RSA PRIVATE KEY"
]
}
}
},
{
"id": "SEC-002",
"group": "security",
"required": true,
"description": "Model registration requires secret_ref and never raw api_key.",
"assert": {
"file_contains": {
"overlays/user-control-center/portal/gitops-dashboard/app.js": [
"api_key_secret_ref",
"startsWith('secret_ref://')",
"api_key_secret_ref_required"
]
},
"file_not_contains": {
"overlays/user-control-center/portal/gitops-dashboard/index.html": [
"name=\"api_key\"",
"name=\"token\"",
"name=\"password\""
]
}
}
},
{
"id": "POLICY-001",
"group": "gitops_policy",
"required": true,
"description": "Direct main writes and destructive actions are disabled or blocked.",
"assert": {
"file_contains": {
"overlays/user-control-center/portal/gitops-dashboard/app.js": [
"main:write",
"destructive_action_blocked",
"high_risk_requires_approval"
],
"overlays/user-control-center/portal/gitops-dashboard/gitops-ui-policy.json": [
"direct_main_write",
"disabled_in_ui",
"bulk_delete",
"forbidden"
]
}
}
},
{
"id": "API-001",
"group": "api_contract",
"required": true,
"description": "Read/write endpoint contract remains compatible with existing GitOps APIs.",
"assert": {
"file_contains": {
"overlays/user-control-center/portal/gitops-dashboard/gitops-enterprise-api.contract.json": [
"GET /api/base",
"GET /api/ver",
"GET /api/run",
"GET /api/patch",
"GET /api/model",
"POST /api/branch",
"POST /api/patch/plan",
"POST /api/model",
"PUT /api/model-priority",
"POST /api/rollback-request",
"POST /api/tag-request"
]
}
}
},
{
"id": "REGRESSION-001",
"group": "indirect_regression",
"required": true,
"description": "This branch must not alter auth, gitea owner sync, baseline version, or destructive history files.",
"assert": {
"diff_not_touch_paths": [
"config/auth/",
"config/casdoor/",
"config/gitea/",
"versions/V1R1C4.json",
"runtime/gitops/current.json"
],
"diff_not_contain": [
"active_version\": \"V1R1C5",
"force push",
"delete tag",
"purge baseline",
"clear audit"
]
}
},
{
"id": "BASELINE-001",
"group": "baseline_proposal",
"required": true,
"description": "A V1R1C5 proposal exists but is not activated before merge.",
"assert": {
"files_exist": [
"versions/proposals/V1R1C5-gitops-platform-ui.proposed.json"
],
"file_contains": {
"versions/proposals/V1R1C5-gitops-platform-ui.proposed.json": [
"V1R1C5",
"V1R1C4",
"approval_required"
]
}
}
},
{
"id": "SKILL-001",
"group": "auto_loaded_skill",
"required": true,
"description": "Codex/GPT reusable skill exists and references the validation workflow.",
"assert": {
"files_exist": [
"skills/gitops-platform-validation/SKILL.md"
],
"file_contains": {
"skills/gitops-platform-validation/SKILL.md": [
"validate-gitops-platform-ui.sh",
"gitops-platform-ui.acceptance.json",
"self-healing"
]
}
}
}
],
"merge_gate": {
"allow_merge_to_main_when": [
"all required tests PASS",
"gray deployment PASS",
"no secret leak",
"no direct main write",
"V1R1C5 proposal reviewed",
"owner/admin approval recorded"
],
"block_merge_when": [
"any required test FAIL",
"any required test BLOCKED without explicit owner override",
"secret leak detected",
"destructive operation detected",
"baseline active version changed before merge"
]
}
}