Wire VedAstro status and live quality gate

This commit is contained in:
732642856
2026-06-29 03:59:30 +08:00
parent 8466e3a71c
commit a07f91c88b
11 changed files with 693 additions and 25 deletions
+52 -1
View File
@@ -98,6 +98,7 @@ QUALITY_GATE_PROFILES = {
"skip_dasha_audit": True,
"skip_oracle_audit": True,
"skip_local_accuracy_report": True,
"skip_vedastro_live": True,
},
"browser": {
"skip_slow": True,
@@ -110,6 +111,7 @@ QUALITY_GATE_PROFILES = {
"skip_dasha_audit": True,
"skip_oracle_audit": True,
"skip_local_accuracy_report": True,
"skip_vedastro_live": True,
},
"release": {
"skip_slow": False,
@@ -122,6 +124,7 @@ QUALITY_GATE_PROFILES = {
"skip_dasha_audit": False,
"skip_oracle_audit": False,
"skip_local_accuracy_report": False,
"skip_vedastro_live": True,
},
"accuracy": {
"skip_slow": True,
@@ -134,6 +137,20 @@ QUALITY_GATE_PROFILES = {
"skip_dasha_audit": False,
"skip_oracle_audit": False,
"skip_local_accuracy_report": False,
"skip_vedastro_live": True,
},
"vedastro-live": {
"skip_slow": True,
"skip_yoga_logic": True,
"skip_frontend_runtime": True,
"skip_frontend_click": True,
"frontend_click_mode": "core",
"check_release_hygiene": False,
"skip_real_cases": True,
"skip_dasha_audit": True,
"skip_oracle_audit": True,
"skip_local_accuracy_report": True,
"skip_vedastro_live": False,
},
}
@@ -341,6 +358,36 @@ def release_hygiene_check() -> None:
print("release_hygiene_check ok: no release-critical product files are untracked")
def run_vedastro_live_smoke() -> None:
print("\n== VedAstro live adapter smoke ==")
endpoint = os.environ.get("VEDASTRO_API_ENDPOINT", "").strip()
network_enabled = os.environ.get("VEDASTRO_ENABLE_NETWORK", "").strip().lower() in {"1", "true", "yes"}
if not endpoint or not network_enabled:
print(json.dumps({
"status": "blocked",
"reason": "vedastro_live_endpoint_or_network_flag_missing",
"required_env": {
"endpoint": "VEDASTRO_API_ENDPOINT",
"network": "VEDASTRO_ENABLE_NETWORK",
},
"boundary": "Default CI stays deterministic; configure both env vars to run a real VedAstro live smoke.",
}, ensure_ascii=False, indent=2))
return
run([
PYTHON,
"scripts/vedastro_service_adapter.py",
"--range-scan",
"--domain",
"career",
"--case",
"beijing_first_use_demo",
"--start-date",
"2026-01-01",
"--end-date",
"2026-12-31",
])
def compile_targets() -> None:
print("\n== Compile core Python files ==")
targets: list[Path] = []
@@ -386,6 +433,7 @@ def run_profile(args: argparse.Namespace) -> dict:
"skip_dasha_audit",
"skip_oracle_audit",
"skip_local_accuracy_report",
"skip_vedastro_live",
]:
if getattr(args, key):
profile[key] = True
@@ -396,7 +444,7 @@ def run_profile(args: argparse.Namespace) -> dict:
def main() -> int:
parser = argparse.ArgumentParser(description="Run Jyotish skill quality gate")
parser.add_argument("--profile", choices=["quick", "browser", "release", "accuracy"], default="browser", help="Quality gate profile: quick, browser, release, or accuracy")
parser.add_argument("--profile", choices=["quick", "browser", "release", "accuracy", "vedastro-live"], default="browser", help="Quality gate profile: quick, browser, release, accuracy, or vedastro-live")
parser.add_argument("--skip-slow", action="store_true", help="Skip slow golden-case regressions")
parser.add_argument("--skip-yoga-logic", action="store_true", help="Skip Yoga logic comparison report refresh")
parser.add_argument("--skip-frontend-runtime", action="store_true", help="Skip frontend build and runtime smoke")
@@ -405,6 +453,7 @@ def main() -> int:
parser.add_argument("--skip-dasha-audit", action="store_true", help="Skip Dasha reference-drift audit")
parser.add_argument("--skip-oracle-audit", action="store_true", help="Skip combined Dasha/Shadbala external oracle boundary audit")
parser.add_argument("--skip-local-accuracy-report", action="store_true", help="Skip consolidated local accuracy report")
parser.add_argument("--skip-vedastro-live", action="store_true", help="Skip optional VedAstro live endpoint smoke")
parser.add_argument("--frontend-click-mode", choices=["core", "mobile", "offline", "pdf", "workspace", "mobile-trust", "import-files", "all"], default=None, help="Browser click smoke mode for browser/release profiles")
parser.add_argument("--frontend-click-timeout", type=int, default=240, help="Timeout seconds for browser click smoke")
parser.add_argument("--all-tests", action="store_true", help="Run every pytest file, including optional-dependency suites")
@@ -449,6 +498,8 @@ def main() -> int:
run([PYTHON, "scripts/validate_logic_v2.py"], optional=True)
if not profile["skip_local_accuracy_report"]:
run([PYTHON, "scripts/local_accuracy_report.py", "--format", "json"])
if not profile["skip_vedastro_live"]:
run_vedastro_live_smoke()
print("\nQuality gate passed.")
return 0