From 03e10698de3b17a6900b27c3101eec4eaf7137fe Mon Sep 17 00:00:00 2001 From: mes123456 Date: Sun, 6 Sep 2026 05:50:11 +0800 Subject: [PATCH] fix(web): persist product completion in scheduler display --- my-tools/show_blender_web_scheduler.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/my-tools/show_blender_web_scheduler.py b/my-tools/show_blender_web_scheduler.py index 16cd6016f..cb5bb7c08 100755 --- a/my-tools/show_blender_web_scheduler.py +++ b/my-tools/show_blender_web_scheduler.py @@ -51,7 +51,11 @@ def main() -> int: status["myTools"]["productMigrationAlive"] = product_alive status["unattendedState"] = ( "IMPLEMENTING" if product_alive and product.get("status") == "implementing" - else "COMPLETE" if product.get("status") == "implementation_complete" + else "COMPLETE" if product.get("status") == "implementation_complete" or ( + product.get("workflowTotal", 0) > 0 + and product.get("workflowImplemented") == product.get("workflowTotal") + and product.get("taskImplemented") == product.get("taskTotal") + ) else "BLOCKED" if product.get("status") == "blocked" else "PLANNING" if status.get("state") == "IDLE" and watchdog_alive and watchdog.get("status") == "waiting_for_source_batch" else status.get("state", "UNKNOWN") @@ -338,7 +342,7 @@ def format_progress(progress: dict, fast_path: dict | None = None) -> list[str]: f" fast path: batch={batch.get('batchId') or 'none'} selected={batch.get('selectedRecordCount', 0)} completed={batch.get('completed', False)}", f" context cache: {context_cache.get('status', 'MISSING')} task={context_cache.get('task') or 'none'} inputs={context_cache.get('inputCount', 0)}; failure ledger entries={ledger.get('entryCount', 0)} hydratedLogs={ledger.get('hydratedLogs', 0)}", f" command budget: max={fast_path.get('commandBudget', {}).get('maxCommands', 48)}, read/exploration max={fast_path.get('commandBudget', {}).get('maxReadCommands', 16)}; verification={fast_path.get('verificationPolicy', 'n/a')}", - f" auto planner: {planner.get('status', 'MISSING')} pending={planner.get('pending', 'n/a')} next={planner.get('nextAction') or 'none'}", + f" retired source verifier: {planner.get('status', 'MISSING')} pending={planner.get('pending', 'n/a')} (traceability reference only)", f" wasm modules: manifest={fast_path.get('wasmModules', {}).get('manifest') or 'missing'} completed-preload={fast_path.get('wasmModules', {}).get('preloadCompleted', 0)} debug-on-demand={fast_path.get('wasmModules', {}).get('debugOnDemand', 0)}", ]