- 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
240 lines
7.0 KiB
JSON
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"
|
|
]
|
|
}
|
|
}
|