Prove planner validation commands execute without manual reconstruction
Constraint: Adding validation_commands to the planner was only useful if the emitted commands could be consumed directly, so the plan artifact needed one more layer of execution proof. Rejected: Assume command strings are correct because they look valid | That would leave restart automation unproven. Confidence: high Scope-risk: narrow Directive: Prefer executing validation_commands from the planner artifact instead of retyping equivalent checks by hand. Tested: git diff --check; /usr/local/miniconda3/bin/python - <<'PY' ... execute validation_commands.prereq_audit and validation_commands.worker_contract_smoke from data/pgvector_eval/music20/phase1_extraction_plan_report.json ... PY Not-tested: The remaining planner validation commands were not executed in this commit, though their sibling commands proved the artifact is directly consumable.
Showing
4 changed files
with
34 additions
and
0 deletions
| 1 | { | ||
| 2 | "prereq_audit": { | ||
| 3 | "command": "cd /workspace/acr-engine && PG_DSN=\"${PG_DSN:?set PG_DSN}\" /usr/local/miniconda3/bin/python scripts/run_phase1_prereq_audit_live.py --dsn \"$PG_DSN\" --schema acr_test --output data/pgvector_eval/music20/phase1_prereq_audit_report.json", | ||
| 4 | "returncode": 0, | ||
| 5 | "stdout_tail": "\n },\n {\n \"extraction_job_id\": 4,\n \"model_name\": \"muq\",\n \"model_version\": \"large-msd-iter\",\n \"embedding_dim\": 768,\n \"target_scope\": \"reference_set:phase1_hot_reference_v1\",\n \"required_packages\": [\n \"numpy\",\n \"torch\",\n \"torchaudio\",\n \"transformers\"\n ],\n \"missing_packages\": [\n \"torch\",\n \"torchaudio\",\n \"transformers\"\n ],\n \"downloads_root_exists\": false,\n \"ready_for_live_worker\": false\n },\n {\n \"extraction_job_id\": 5,\n \"model_name\": \"ecapa\",\n \"model_version\": \"acr-baseline-v1\",\n \"embedding_dim\": 192,\n \"target_scope\": \"reference_set:phase1_hot_reference_v1\",\n \"required_packages\": [\n \"numpy\",\n \"torch\",\n \"torchaudio\",\n \"speechbrain\"\n ],\n \"missing_packages\": [\n \"torch\",\n \"torchaudio\",\n \"speechbrain\"\n ],\n \"downloads_root_exists\": false,\n \"ready_for_live_worker\": false\n }\n ],\n \"summary\": {\n \"total_jobs\": 5,\n \"ready_jobs\": 0,\n \"blocked_jobs\": 5,\n \"missing_packages_union\": [\n \"speechbrain\",\n \"torch\",\n \"torchaudio\",\n \"transformers\"\n ]\n }\n}\n", | ||
| 6 | "stderr_tail": "", | ||
| 7 | "passed": true | ||
| 8 | }, | ||
| 9 | "worker_contract_smoke": { | ||
| 10 | "command": "cd /workspace/acr-engine && PG_DSN=\"${PG_DSN:?set PG_DSN}\" /usr/local/miniconda3/bin/python scripts/run_phase1_worker_contract_smoke_live.py --dsn \"$PG_DSN\" --schema acr_test --output data/pgvector_eval/music20/phase1_worker_contract_smoke_report.json", | ||
| 11 | "returncode": 0, | ||
| 12 | "stdout_tail": "{\n \"schema\": \"acr_test\",\n \"dsn_redacted\": \"postgres://d2:***@127.0.0.1:5432/d2\",\n \"exact_lane\": {\n \"job_id\": 1,\n \"returncode\": 0,\n \"job_status\": \"failed\",\n \"failure_reason\": \"unreadable_audio_assets\",\n \"missing_asset_count\": 20,\n \"artifact\": \"data/pgvector_eval/music20/phase1_worker_contract_smoke_exact.json\"\n },\n \"semantic_lane\": {\n \"returncode\": 0,\n \"semantic_job_count\": 4,\n \"failed_jobs\": 4,\n \"unique_blockers\": [\n \"model_runtime_unavailable\",\n \"unreadable_audio_assets\"\n ],\n \"artifact\": \"data/pgvector_eval/music20/phase1_worker_contract_smoke_semantic_matrix.json\"\n },\n \"summary\": {\n \"exact_status\": \"failed\",\n \"semantic_failed_jobs\": 4,\n \"shared_environment_blockers\": [\n \"missing /workspace/downloads mount\",\n \"missing semantic model runtime dependencies\"\n ]\n }\n}\n", | ||
| 13 | "stderr_tail": "", | ||
| 14 | "passed": true | ||
| 15 | } | ||
| 16 | } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | ## 2026-06-04 | 1 | ## 2026-06-04 |
| 2 | 2 | ||
| 3 | - 新增 `phase1_validation_commands_execution_report.json`,直接从 `phase1_extraction_plan_report.json` 读取并执行 `validation_commands.prereq_audit` 与 `validation_commands.worker_contract_smoke`,两条命令均返回 `0`,证明 planner 产物可被脚本化直接消费。 | ||
| 3 | - 更新 `scripts/plan_phase1_extraction_jobs_live.py` 与 `phase1_extraction_plan_report.json`,除了 per-job `command_suggestions` 之外,又补充了 `validation_commands`:`prereq_audit`、`worker_contract_smoke`、`semantic_vector_negative_matrix`、`asset_level_upsert_validation`,使 planner 本身也成为下次 session 的执行入口。 | 4 | - 更新 `scripts/plan_phase1_extraction_jobs_live.py` 与 `phase1_extraction_plan_report.json`,除了 per-job `command_suggestions` 之外,又补充了 `validation_commands`:`prereq_audit`、`worker_contract_smoke`、`semantic_vector_negative_matrix`、`asset_level_upsert_validation`,使 planner 本身也成为下次 session 的执行入口。 |
| 4 | - 新增 `scripts/run_phase1_prereq_audit_live.py` 与 `phase1_prereq_audit_report.json`,把 `/workspace/downloads` 挂载状态、`torch/torchaudio/transformers/speechbrain` 依赖状态与 5 条 Phase-1 jobs 的 readiness 汇总到一份 live 审计报告;当前结果为 `ready_jobs=0`、`blocked_jobs=5`。 | 5 | - 新增 `scripts/run_phase1_prereq_audit_live.py` 与 `phase1_prereq_audit_report.json`,把 `/workspace/downloads` 挂载状态、`torch/torchaudio/transformers/speechbrain` 依赖状态与 5 条 Phase-1 jobs 的 readiness 汇总到一份 live 审计报告;当前结果为 `ready_jobs=0`、`blocked_jobs=5`。 |
| 5 | - 新增 `scripts/run_embedding_vector_table_negative_matrix_live.py` 与 `embedding_vector_table_negative_matrix_report.json`,在 live PostgreSQL 上补齐 semantic preflight 的三类向量表负例:维度不匹配、未 allowlist、schema 缺表;三类 case 都会稳定落到 `preflight_failed`,且 `vector_table_report.reason` 与预期一致。 | 6 | - 新增 `scripts/run_embedding_vector_table_negative_matrix_live.py` 与 `embedding_vector_table_negative_matrix_report.json`,在 live PostgreSQL 上补齐 semantic preflight 的三类向量表负例:维度不匹配、未 allowlist、schema 缺表;三类 case 都会稳定落到 `preflight_failed`,且 `vector_table_report.reason` 与预期一致。 | ... | ... |
| ... | @@ -468,3 +468,19 @@ cd /workspace/acr-engine && PG_DSN="${PG_DSN:?set PG_DSN}" EXTRACTION_JOB_ID=2 F | ... | @@ -468,3 +468,19 @@ cd /workspace/acr-engine && PG_DSN="${PG_DSN:?set PG_DSN}" EXTRACTION_JOB_ID=2 F |
| 468 | 4. 再验证 asset-level upsert contract | 468 | 4. 再验证 asset-level upsert contract |
| 469 | 469 | ||
| 470 | 这让 planner 从“只会排任务”升级成“同时给出执行前检查入口”的交付物。 | 470 | 这让 planner 从“只会排任务”升级成“同时给出执行前检查入口”的交付物。 |
| 471 | |||
| 472 | |||
| 473 | ### 10.5 planner validation_commands 已做直接消费验证 | ||
| 474 | |||
| 475 | 本轮继续补了一层 fresh evidence:不是只看 planner JSON 里有命令,而是**直接从 `phase1_extraction_plan_report.json` 读取命令后执行**。 | ||
| 476 | |||
| 477 | 对应产物: | ||
| 478 | |||
| 479 | - `acr-engine/data/pgvector_eval/music20/phase1_validation_commands_execution_report.json` | ||
| 480 | |||
| 481 | 当前已验证: | ||
| 482 | |||
| 483 | - `validation_commands.prereq_audit` -> `returncode = 0` | ||
| 484 | - `validation_commands.worker_contract_smoke` -> `returncode = 0` | ||
| 485 | |||
| 486 | 这说明 planner 报告现在不仅能“展示命令”,还可以被脚本化消费为真正的执行入口。 | ... | ... |
| ... | @@ -197,6 +197,7 @@ sed -n '1,320p' acr-engine/sql/acr_pg_schema_v2.sql | ... | @@ -197,6 +197,7 @@ sed -n '1,320p' acr-engine/sql/acr_pg_schema_v2.sql |
| 197 | - `scripts/run_embedding_vector_table_negative_matrix_live.py` 已在 live PostgreSQL 上补齐 semantic vector-table 负例矩阵:`vector_table_dim_mismatch`、`vector_table_not_allowlisted`、`vector_table_missing_in_schema` 三类错误都能被稳定写入 `vector_table_report.reason` | 197 | - `scripts/run_embedding_vector_table_negative_matrix_live.py` 已在 live PostgreSQL 上补齐 semantic vector-table 负例矩阵:`vector_table_dim_mismatch`、`vector_table_not_allowlisted`、`vector_table_missing_in_schema` 三类错误都能被稳定写入 `vector_table_report.reason` |
| 198 | - `scripts/run_phase1_prereq_audit_live.py` 已给出当前 host 的先决条件审计:`downloads_root_exists=false`、`ready_jobs=0/5`,并把 `torch/torchaudio/transformers/speechbrain` 的缺失状态按 job 落成 JSON 报告 | 198 | - `scripts/run_phase1_prereq_audit_live.py` 已给出当前 host 的先决条件审计:`downloads_root_exists=false`、`ready_jobs=0/5`,并把 `torch/torchaudio/transformers/speechbrain` 的缺失状态按 job 落成 JSON 报告 |
| 199 | - `phase1_extraction_plan_report.json` 现已附带 `validation_commands`,下次 session 可以直接从 planner 复制 `prereq_audit / worker_contract_smoke / semantic_vector_negative_matrix / asset_level_upsert_validation` 四类命令 | 199 | - `phase1_extraction_plan_report.json` 现已附带 `validation_commands`,下次 session 可以直接从 planner 复制 `prereq_audit / worker_contract_smoke / semantic_vector_negative_matrix / asset_level_upsert_validation` 四类命令 |
| 200 | - `phase1_validation_commands_execution_report.json` 已证明 planner 里的 `prereq_audit` 与 `worker_contract_smoke` 两条 validation commands 可以被直接脚本消费且 `returncode=0` | ||
| 200 | - `phase1_hot_reference_v1` 在 `acr_test` 里已经真实补齐 `20` 个 reference members,因此 worker dry-run 当前看到的 scope 已是 `20 recordings / 20 assets / 20 windows` | 201 | - `phase1_hot_reference_v1` 在 `acr_test` 里已经真实补齐 `20` 个 reference members,因此 worker dry-run 当前看到的 scope 已是 `20 recordings / 20 assets / 20 windows` |
| 201 | - worker contract 现在已有基础前置状态保护;重复执行同一 chromaprint dry-run job 会被 `expected_status=pending` 明确拒绝,证据见 `phase1_worker_double_claim_guard_report.json` | 202 | - worker contract 现在已有基础前置状态保护;重复执行同一 chromaprint dry-run job 会被 `expected_status=pending` 明确拒绝,证据见 `phase1_worker_double_claim_guard_report.json` |
| 202 | - exact lane 的 `run_chromaprint_job.py` 已具备非 dry-run 写入路径;当前在 `acr_test` 的 live 结果是因为 `/workspace/downloads/...` 缺失而明确 `failed`,不是继续假装 `completed` | 203 | - exact lane 的 `run_chromaprint_job.py` 已具备非 dry-run 写入路径;当前在 `acr_test` 的 live 结果是因为 `/workspace/downloads/...` 缺失而明确 `failed`,不是继续假装 `completed` | ... | ... |
-
Please register or sign in to post a comment