chore(repo): make the release gate reproducible and clean product URLs

PyJHora absence is now partial, tests write research manifests to tmp, the registry allows experimental_variant, and product links point at the Gitea repo. Early logs move to docs/history.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-09-03 16:55:26 +08:00
parent b6a70aa7df
commit 2415e751fe
32 changed files with 320 additions and 115 deletions
+17 -2
View File
@@ -79,6 +79,20 @@ def _strict_summary(report: dict[str, Any]) -> dict[str, Any]:
}
def resolve_acceptance_status(errors: list[str], adapter_report: dict[str, Any]) -> str:
"""Hard failures stay fail; a missing reference engine is a partial, not a fail."""
if errors:
return "fail"
engines = adapter_report.get("engines") if isinstance(adapter_report.get("engines"), dict) else {}
for details in engines.values():
if not isinstance(details, dict):
continue
blockers = details.get("readiness_blockers") or []
if details.get("missing_dependency") or "missing_dependency" in blockers:
return "partial"
return "pass"
def main() -> int:
pytest_check = _run(
[
@@ -162,9 +176,10 @@ def main() -> int:
if adapter_report.get("status") not in usable_adapter_statuses:
errors.append("external_adapter_status_unusable")
status = resolve_acceptance_status(errors, adapter_report)
result = {
"scope": "user_invocation_acceptance_check",
"status": "pass" if not errors else "fail",
"status": status,
"errors": errors,
"checks": {
"user_invocation_tests": pytest_check["returncode"] == 0,
@@ -177,7 +192,7 @@ def main() -> int:
"external_engines": _engine_summary(adapter_report),
}
print(json.dumps(result, ensure_ascii=False, indent=2, sort_keys=True))
return 0 if not errors else 1
return 0 if status != "fail" else 1
if __name__ == "__main__":