fix(openapi): harden story 2.1 production lifecycle
CI / Rust Checks (push) Failing after 4m6s
CI / UI Checks (push) Has been skipped
CI / Frontend E2E (push) Has been skipped
CI / Community Image Smoke (push) Has been skipped
CI / Deploy (push) Has been skipped

This commit is contained in:
2026-08-29 00:48:22 +03:00
parent 2c94af6791
commit bc03c33387
46 changed files with 2198 additions and 276 deletions
+14 -2
View File
@@ -122,6 +122,18 @@ def run_schema(schema: Any) -> dict[str, Any]:
return definition
def validate_accepted_semantics(candidate: Any) -> None:
"""Fail closed: accepted evidence must be an automated passing run."""
if not isinstance(candidate, dict):
raise ValidationError('/', 'accepted evidence candidate must be an object')
if candidate.get('accepted') is not True:
raise ValidationError('/accepted', 'accepted evidence is required')
if candidate.get('execution_verdict') != 'pass':
raise ValidationError('/execution_verdict', 'accepted evidence requires execution_verdict=pass')
if candidate.get('evidence_mode') != 'automated':
raise ValidationError('/evidence_mode', 'accepted evidence requires evidence_mode=automated')
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--schema', required=True)
@@ -133,8 +145,8 @@ def main() -> int:
schema = load_json(Path(args.schema))
candidate = load_json(Path(args.candidate))
validate(candidate, run_schema(schema))
if args.require_accepted and candidate.get('accepted') is not True:
raise ValidationError('/accepted', 'accepted evidence is required')
if args.require_accepted:
validate_accepted_semantics(candidate)
except ValidationError as error:
print(f'INVALID_CAPABILITY_RUN pointer={error.pointer} reason={error.message}', file=sys.stderr)
return 1