feat(ack): bind test env to deployer and add regression mode

ACK 0.19.0 hands test-environment deploys to the deployer skill,
documents bug-fix as a first-class scenario, and adds
docs/ack/regression.yaml harvest plus a /ack regression run.
This commit is contained in:
2026-08-25 14:41:05 +08:00
parent ee31278947
commit ad6695245b
39 changed files with 1919 additions and 206 deletions
+176
View File
@@ -69,6 +69,11 @@
"const": "docs/ack/delivery.yaml",
"description": "可选项目交付契约的唯一权威路径"
},
"regressionFile": {
"type": "string",
"const": "docs/ack/regression.yaml",
"description": "可选项目回归目录的唯一权威路径"
},
"bugIntake": {
"$ref": "#/definitions/feishuBugIntake"
},
@@ -122,6 +127,12 @@
"$ref": "#/definitions/deliveryRun"
}
},
"regressionRuns": {
"type": "array",
"items": {
"$ref": "#/definitions/regressionRun"
}
},
"tasks": {
"type": "array",
"items": {
@@ -243,6 +254,32 @@
"deliveryRuns": {}
}
}
},
{
"if": {
"properties": {
"project": {
"type": "object",
"required": [
"regressionFile"
],
"properties": {
"regressionFile": {}
}
}
},
"required": [
"project"
]
},
"then": {
"required": [
"regressionRuns"
],
"properties": {
"regressionRuns": {}
}
}
}
],
"definitions": {
@@ -1750,6 +1787,20 @@
"$ref": "#/definitions/knowledgeCheck"
}
},
"regressionRefs": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^REG-[A-Za-z0-9][A-Za-z0-9-]*$"
}
},
"regressionCandidates": {
"type": "array",
"items": {
"$ref": "#/definitions/regressionCandidate"
}
},
"source": {
"if": {
"type": "object",
@@ -1908,6 +1959,131 @@
}
}
]
},
"regressionCandidate": {
"type": "object",
"required": ["title", "surface", "steps", "expected"],
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"pattern": "^REG-[A-Za-z0-9][A-Za-z0-9-]*$"
},
"title": { "type": "string", "minLength": 1, "pattern": "\\S" },
"surface": { "type": "string", "enum": ["browser", "api"] },
"suite": { "type": "string", "enum": ["smoke", "full"] },
"setup": { "type": "string" },
"steps": {
"type": "array",
"minItems": 1,
"items": { "type": "string", "minLength": 1 }
},
"expected": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["kind", "value"],
"additionalProperties": false,
"properties": {
"kind": {
"type": "string",
"enum": [
"visible-text",
"api-status",
"api-field",
"url",
"interaction"
]
},
"value": { "type": "string", "minLength": 1, "pattern": "\\S" }
}
}
},
"sourceKind": { "type": "string", "enum": ["feature", "bug"] }
}
},
"regressionRun": {
"type": "object",
"required": [
"id",
"suite",
"caseIds",
"status",
"sourceRevision",
"configRevision",
"baseUrl",
"results",
"evidence",
"updatedAt"
],
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"pattern": "^RR-[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
},
"suite": { "type": "string", "enum": ["smoke", "full", "custom"] },
"caseIds": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^REG-[A-Za-z0-9][A-Za-z0-9-]*$"
}
},
"taskIds": {
"type": "array",
"uniqueItems": true,
"items": { "type": "string", "minLength": 1 }
},
"deliveryRunId": {
"type": "string",
"pattern": "^DR-[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
},
"status": {
"type": "string",
"enum": [
"planned",
"running",
"passed",
"failed",
"blocked",
"skipped"
]
},
"sourceRevision": {
"type": ["string", "null"],
"pattern": "^[0-9a-f]{7,64}$"
},
"configRevision": {
"type": ["string", "null"],
"pattern": "^[0-9a-f]{7,64}$"
},
"baseUrl": { "type": ["string", "null"] },
"results": {
"type": "array",
"items": {
"type": "object",
"required": ["caseId", "result", "evidence"],
"additionalProperties": false,
"properties": {
"caseId": {
"type": "string",
"pattern": "^REG-[A-Za-z0-9][A-Za-z0-9-]*$"
},
"result": { "type": "string", "enum": ["pass", "fail", "skipped"] },
"evidence": { "type": "string", "minLength": 1 }
}
}
},
"evidence": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
},
"updatedAt": { "type": "string", "minLength": 1 }
}
}
}
}