mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-19 13:23:50 +03:00
Adds a shadow release-acceptance report alongside release-green: an inventory/reduce/oracle pipeline under `scripts/quality/release-acceptance/` with a JSON schema, fixtures and a workflow that uploads the report as an artifact. Contained by design, which is why it merges as-is: it runs only on push to `release/v*` and on manual dispatch (never on pull requests), the step is `continue-on-error`, `permissions: contents: read`, `persist-credentials: false`, and it consumes no secrets. Nothing in the product changes; the report is advisory until we decide to promote it. Validated as a combined board first (this PR merged with the 11 siblings of the same batch on the release tip): eslint on every changed file with the suppressions file, typecheck:core, check:open-sse-typecheck, complexity, cognitive-complexity, changelog-integrity, i18n new-key coverage, docs-sync, migration-numbering, provider-consistency and a duplicate-identifier audit all green, plus 275 passing / 0 failing focused node:test cases across the 28 test files the batch touches. Then re-validated alone on the fresh tip before this merge: conflicts re-resolved, file sizes rebaselined for this PR's own growth, eslint and this PR's focused tests re-run. Thanks @HouMinXi! Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com>
184 lines
5.4 KiB
JSON
184 lines
5.4 KiB
JSON
{
|
|
"$id": "https://omniroute.local/quality/release-acceptance.schema.json",
|
|
"title": "Release acceptance report",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"identity",
|
|
"required_gates",
|
|
"gates",
|
|
"evidence_errors",
|
|
"verdict",
|
|
"artifact"
|
|
],
|
|
"properties": {
|
|
"schema_version": { "type": "integer", "const": 1 },
|
|
"identity": { "$ref": "#/$defs/identity" },
|
|
"required_gates": {
|
|
"type": "array",
|
|
"uniqueItems": true,
|
|
"items": { "$ref": "#/$defs/gateInstanceKey" }
|
|
},
|
|
"gates": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/gateResult" }
|
|
},
|
|
"evidence_errors": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/evidenceError" }
|
|
},
|
|
"verdict": { "enum": ["VERIFIED", "FAILED", "UNVERIFIED"] },
|
|
"artifact": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "$ref": "#/$defs/artifact" }
|
|
]
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": { "properties": { "verdict": { "const": "VERIFIED" } }, "required": ["verdict"] },
|
|
"then": { "properties": { "required_gates": { "minItems": 1 } } }
|
|
}
|
|
],
|
|
"$defs": {
|
|
"sha": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{40}$"
|
|
},
|
|
"digest": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{64}$"
|
|
},
|
|
"gateInstanceKey": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["gate_id", "suite_id", "shard_index", "shard_total"],
|
|
"properties": {
|
|
"gate_id": { "type": "string", "minLength": 1 },
|
|
"suite_id": { "type": ["string", "null"] },
|
|
"shard_index": { "type": ["integer", "null"], "minimum": 0 },
|
|
"shard_total": { "type": ["integer", "null"], "minimum": 1 }
|
|
}
|
|
},
|
|
"identity": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"repository",
|
|
"run_id",
|
|
"run_attempt",
|
|
"workflow",
|
|
"trigger",
|
|
"scope",
|
|
"requested_ref",
|
|
"base_sha",
|
|
"candidate_sha",
|
|
"tested_sha"
|
|
],
|
|
"properties": {
|
|
"repository": { "type": "string", "minLength": 1 },
|
|
"run_id": { "type": "string", "minLength": 1 },
|
|
"run_attempt": { "type": "integer", "minimum": 1 },
|
|
"workflow": { "type": "string", "minLength": 1 },
|
|
"trigger": { "type": "string", "minLength": 1 },
|
|
"scope": { "enum": ["pr", "release", "scheduled"] },
|
|
"requested_ref": { "type": "string", "minLength": 1 },
|
|
"base_sha": { "$ref": "#/$defs/sha" },
|
|
"candidate_sha": { "$ref": "#/$defs/sha" },
|
|
"tested_sha": { "$ref": "#/$defs/sha" }
|
|
}
|
|
},
|
|
"evidenceRef": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["artifact_id", "member", "algorithm", "digest"],
|
|
"properties": {
|
|
"artifact_id": { "type": "string", "minLength": 1 },
|
|
"member": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"pattern": "^(?!/)(?!.*(?:^|[/\\\\])\\.\\.(?:[/\\\\]|$))[^\\s]+$"
|
|
},
|
|
"algorithm": { "const": "sha256" },
|
|
"digest": { "$ref": "#/$defs/digest" }
|
|
}
|
|
},
|
|
"artifact": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["algorithm", "digest", "identity"],
|
|
"properties": {
|
|
"algorithm": { "const": "sha256" },
|
|
"digest": { "$ref": "#/$defs/digest" },
|
|
"identity": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"evidenceError": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["code", "gate", "detail"],
|
|
"properties": {
|
|
"code": { "type": "string", "minLength": 1 },
|
|
"gate": { "$ref": "#/$defs/gateInstanceKey" },
|
|
"detail": { "type": "string" }
|
|
}
|
|
},
|
|
"gateResult": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"gate_id",
|
|
"suite_id",
|
|
"shard_index",
|
|
"shard_total",
|
|
"tested_sha",
|
|
"run_id",
|
|
"run_attempt",
|
|
"command_id",
|
|
"gate_type",
|
|
"status",
|
|
"cause",
|
|
"exit_code",
|
|
"duration_ms",
|
|
"evidence"
|
|
],
|
|
"properties": {
|
|
"gate_id": { "type": "string", "minLength": 1 },
|
|
"suite_id": { "type": ["string", "null"] },
|
|
"shard_index": { "type": ["integer", "null"], "minimum": 0 },
|
|
"shard_total": { "type": ["integer", "null"], "minimum": 1 },
|
|
"tested_sha": { "$ref": "#/$defs/sha" },
|
|
"run_id": { "type": "string", "minLength": 1 },
|
|
"run_attempt": { "type": "integer", "minimum": 1 },
|
|
"command_id": { "type": "string", "minLength": 1 },
|
|
"gate_type": { "enum": ["static", "test", "artifact"] },
|
|
"status": { "enum": ["PASS", "FAIL", "INFRA_ERROR", "SKIPPED"] },
|
|
"reason": { "type": "string", "minLength": 1 },
|
|
"cause": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "$ref": "#/$defs/gateInstanceKey" }
|
|
]
|
|
},
|
|
"exit_code": { "type": ["integer", "null"] },
|
|
"duration_ms": { "type": "integer", "minimum": 0 },
|
|
"evidence": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/evidenceRef" }
|
|
}
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"properties": { "status": { "const": "SKIPPED" } },
|
|
"required": ["status"]
|
|
},
|
|
"then": { "required": ["reason"] }
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|