{ "schema": "freecad-web-failure-patterns/v1", "updatedAt": "2026-09-15T04:03:01.731484+00:00", "patterns": [ { "category": "other", "occurrences": 2785, "unresolved": 1762, "prevention": "保留首错,先做最小复现和增量修复,不重复整批重试。", "representativeCommand": "/bin/bash -lc \"cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && sed -n '1,260p' docs/current/task-state.json && sed -n '1,360p' docs/current/context-manifest.json && sed -n '1,360p' nextTask.md && sed -n '1,360p' docs/current/module-batch-manifest.json && sed -n '1,260p' docs/current/continuation-state.json\"", "representativeError": "{ \"schema\": \"freecad-web-task-state/v1\", \"generated_at\": \"2026-09-03\", \"active_task\": \"FW-P6-FPA-Y\", \"default_status\": \"planned\", \"source_matrix\": \"docs/web-parity-matrix.json\", \"source_matrix_sha256\": \"fba71b1c3cb7b3e9172cce83a04aa9fc544651f146eb7879633512814614534b\", \"module_status\": { \"Assembly\": \"completed\", \"BIM\": \"completed\", \"CAM\": \"completed\", \"Cloud\": \"completed\", \"Draft\": \"completed\", \"Fem\": \"completed\", \"Help\": \"completed\", \"Import\": \"completed\", \"Inspection\": \"completed\", \"JtReader\": \"completed\", \"Material\": \"completed\", \"Measure\": \"completed\", \"Mesh\": \"completed\", \"MeshPart\": \"completed\", \"OpenSCAD\": \"completed\", \"Part\": \"completed\", \"PartDesign\": \"completed\", \"Plot\": \"comple...", "lastSeenAt": "2026-09-15T04:03:01.221810+00:00" }, { "category": "inspection-scope", "occurrences": 977, "unresolved": 436, "prevention": "使用 manifest-scoped fast_source_search 或显式当前文件;git diff/status 必须带 -- pathspec。", "representativeCommand": "/bin/bash -lc 'git diff --stat && git diff --check && test -f web/tsconfig.json && npx --prefix web tsc --noEmit -p web/tsconfig.json'", "representativeError": "SCHEDULER_GIT_SCOPE_REJECTED: git diff requires '-- ' in implementation turns", "lastSeenAt": "2026-09-15T04:03:00.486589+00:00" }, { "category": "path-or-artifact-missing", "occurrences": 533, "unresolved": 321, "prevention": "使用绝对 workspace 路径,并将 build tree 归一到实际 bin/artifact 目录。", "representativeCommand": "/bin/bash -lc \"cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && rg -n 'prepare_bim_probe_resources.py' /home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/src/WebAssembly/FreeCADCoreProbe/CMakeLists.txt /home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/CMakeLists.txt /home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/CMakeLists.txt\"", "representativeError": "rg: /home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/CMakeLists.txt: No such file or directory (os error 2) /home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/src/WebAssembly/FreeCADCoreProbe/CMakeLists.txt:976:# Staging is regenerated by tools/prepare_bim_probe_resources.py before builds.", "lastSeenAt": "2026-09-15T00:23:42.874978+00:00" }, { "category": "runtime-timeout", "occurrences": 276, "unresolved": 130, "prevention": "保留真实边界,只允许一次受控重试;后续按 evidence 去重。", "representativeCommand": "/bin/bash -lc \"cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && timeout 120s bash -c 'while pgrep -f \\\"python3 - <<\\\" >/dev/null || pgrep -f \\\"node tools/replay_scheduler_failures_20260903.mjs\\\" >/dev/null; do sleep 5; done' && pgrep -af 'python3 - <<|replay_scheduler_failures_20260903' || true\"", "representativeError": "", "lastSeenAt": "2026-09-11T14:20:15.208712+00:00" }, { "category": "esm-cjs-worker", "occurrences": 148, "unresolved": 89, "prevention": "将 pthread worker staging 为 .worker.cjs,并通过 locateFile 指向 staging 文件。", "representativeCommand": "/bin/bash -lc \"cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && timeout 60s node --input-type=module - <<'NODE' import fs from 'node:fs'; import path from 'node:path'; import {createRequire} from 'node:module'; import {pathToFileURL} from 'node:url'; const b=path.resolve('freecad-source/build-web/configure/bin'); globalThis.__dirname=b+path.sep; globalThis.require=createRequire(import.meta.url); const m=await import(pathToFileURL(path.join(b,'FreeCADWebBimRuntimeProbe.js'))); const k=awai...", "representativeError": "BuildingPart.getShapes {\"ok\":false,\"cmd\":\"\",\"code\":\"native_error\",\"error\":\"unknown BIM native dispatch failure\"} file:///home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/build-web/configure/bin/FreeCADWebBimRuntimeProbe.js:9 function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP16}function GROWABLE_HEAP_U16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}r...", "lastSeenAt": "2026-09-11T10:21:12.292609+00:00" }, { "category": "build-command-failure", "occurrences": 97, "unresolved": 27, "prevention": "先运行 link-closure preflight,使用当前模块主 probe 和 -j8;失败后只允许一次定点重试。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && python3 tools/prepare_bim_probe_resources.py && cmake --build freecad-source/build-web/configure --target FreeCADWebBimRuntimeProbe -j8'", "representativeError": "usage: prepare_bim_probe_resources.py [-h] --output OUTPUT prepare_bim_probe_resources.py: error: the following arguments are required: --output", "lastSeenAt": "2026-09-14T23:36:32.881299+00:00" }, { "category": "gate-command-failure", "occurrences": 67, "unresolved": 51, "prevention": "先运行当前批次预检并确认 gate 使用当前 manifest、正确 build/bin 路径和现有 artifact。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && node tools/run_p6_mesh_object_module_batch_gate.mjs /home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/build-web/configure/bin'", "representativeError": "", "lastSeenAt": "2026-09-09T04:20:02.334681+00:00" }, { "category": "wasm-memory", "occurrences": 64, "unresolved": 5, "prevention": "缩小当前功能族批次,检查 initial memory 和单条 fixture 的资源释放。", "representativeCommand": "/usr/bin/python3 tools/run_business_acceptance.py --reuse --module BIM --ids business-format:BIM:export:.obj business-format:BIM:import:.obj", "representativeError": "--- extracted business diagnostics --- {\"reason\": \"bim.formatWorkflow: JSON import succeeds: {\\\"ok\\\":false,\\\"cmd\\\":\\\"bim.formatWorkflow\\\",\\\"code\\\":\\\"native_error\\\",\\\"error\\\":\\\"BIM geometry-value source execution failed: module 'importers' has no attribute 'load'\\\"}\\nbim.formatWorkflow: roundtrip restores both edited solids and placement: [{\\\"name\\\":\\\"Existing\\\",\\\"label\\\":\\\"Existing\\\",\\\"volume\\\":6,\\\"bounds\\\":[-30,0,0,-27,2,1]}]\\nbim.formatWorkflow: JSON import succeeds: {\\\"ok\\\":false,\\\"cmd\\\":\\\"bim.formatWorkflow\\\",\\\"code\\\":\\\"native_e\\n... output middle omitted; failure tail follows ...\\ns123456/FreeCADWasmDev/working/FreeCAD/tools/bim-recovery-business-cases.mjs:407:19)\\n at file:///home/m...", "lastSeenAt": "2026-09-10T20:57:30.071657+00:00" }, { "category": "link-missing-library", "occurrences": 58, "unresolved": 14, "prevention": "先运行 check_web_link_closure,补齐真实归档或移除无用可选依赖,再重链。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && EM_CONFIG=/home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/build-web/emscripten-config.py EM_CACHE=/tmp/freecad-p6-emcache EM_FROZEN_CACHE= EMCC_CORES=8 cmake --build freecad-source/build-web/configure --target FreeCADWebAssemblyProbe -j8'", "representativeError": "[1/1] Linking CXX executable bin/FreeCADWebAssemblyProbe.js FAILED: bin/FreeCADWebAssemblyProbe.js : && /usr/bin/em++ -Wall -Wextra -Wpedantic -Wno-write-strings -fdiagnostics-color -include/home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/src/FCWebRangesCompat.h -Wno-undefined-var-template -g -O0 -DFC_DEBUG -O2 -g0 --no-entry -sWASM=1 -sMODULARIZE=1 -sEXPORT_ES6=1 -sEXPORT_NAME=FreeCADWebAssemblyProbe -sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=33554432 -sENVIRONMENT=web,worker,node -sUSE_BZIP2=1 -sDISABLE_EXCEPTION_CATCHING=0 \"-sEXPORTED_RUNTIME_METHODS=['ccall']\" --embed-file=/home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/build-web/python-pthread-install/lib/pyt...", "lastSeenAt": "2026-09-12T15:57:37.484181+00:00" }, { "category": "gate-hardcoded-batch", "occurrences": 37, "unresolved": 21, "prevention": "gate 必须读取当前 module-batch-manifest,不得硬编码 batchId/recordCount。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && PART_BATCH_MANIFEST=docs/p6/part-module-batch-42ec634ad97d472d26e94af1-replay.json timeout 180s node tools/run_p6_part_module_batch_gate.mjs freecad-source/build-web/configure/bin'", "representativeError": "file:///home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/run_p6_part_module_batch_gate.mjs:22 if (batch.status !== \"ready\" || batch.selected?.module !== \"Part\" || ![\"tier-1-readonly\", \"tier-2-pure\", \"object-contract\"].includes(selectedTier) || typeof selectedFamily !== \"string\" || batch.records.length < 2 || batch.records.length > 32) throw new Error(\"unexpected Part module batch manifest\"); ^ Error: unexpected Part module batch manifest at file:///home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/run_p6_part_module_batch_gate.mjs:22:250 at ModuleJob.run (node:internal/modules/esm/module_job:439:25) at async node:internal/modules/esm/loader:643:26 at async asyncRunEntryPointWithESMLo...", "lastSeenAt": "2026-09-15T00:49:55.003463+00:00" }, { "category": "node-module-missing", "occurrences": 37, "unresolved": 18, "prevention": "先确认目标 runtime/wasm/worker artifact 存在,再运行 gate。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && timeout 120s node tools/run_p6_data_property_family_gate.mjs freecad-source/build-web/configure/bin'", "representativeError": "node:internal/modules/esm/resolve:271 throw new ERR_MODULE_NOT_FOUND( ^ Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/build-web/configure/bin/FreeCADWebDataPropertyFamilyProbe.js' imported from /home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/run_p6_data_property_family_gate.mjs at finalizeResolution (node:internal/modules/esm/resolve:271:11) at moduleResolve (node:internal/modules/esm/resolve:865:10) at defaultResolve (node:internal/modules/esm/resolve:992:11) at #cachedDefaultResolve (node:internal/modules/esm/loader:701:20) at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:721:38) at ModuleLoad...", "lastSeenAt": "2026-09-11T13:54:21.501722+00:00" }, { "category": "orchestration-command-failure", "occurrences": 23, "unresolved": 17, "prevention": "只执行当前状态机允许的增量入口,发现 checkpoint/context 失配先修复再领取任务。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && python3 tools/rotate_web_task_context.py --reason completed --next-task FW-P6-FPA-Y && python3 tools/sync_web_task_state.py --active FW-P6-FPA-Y && python3 tools/prepare_web_task_context.py && python3 tools/validate_web_context.py'", "representativeError": "wrote docs/current/task-state.json: 1097 tasks, active=FW-P6-FPA-Y CONTEXT PACKET READY: FW-P6-FPA-Y; 13859B/16384B, ~3464 tokens, 0 evidence files; manifest=/home/mes123456/FreeCADWasmDev/working/FreeCAD/docs/current/context/FW-P6-FPA-Y.json; summary=/home/mes123456/FreeCADWasmDev/working/FreeCAD/docs/current/FREECAD_WEB_CONTEXT_MIN.md - excluded: docs/tasks/p6/full-parity/FW-P6-FPA-Y.md (evidence exceeds per-file context cap) - excluded: docs/p6/full-parity-gate.json (evidence exceeds per-file context cap) - excluded: docs/p6/python-api-manifest.json (evidence exceeds per-file context cap) - excluded: docs/p6/full-parity-gate.md (evidence byte budget) - excluded: docs/tasks/p6/full-pari...", "lastSeenAt": "2026-09-14T18:44:01.677375+00:00" }, { "category": "context-batch-stale", "occurrences": 20, "unresolved": 5, "prevention": "先运行 continuation checker,再按当前 manifest 重建 context;不得直接运行 gate。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && python3 tools/check_continuation_state.py && python3 tools/validate_web_context.py'", "representativeError": "CONTINUATION_STATE_INVALID: continuation batchId does not match module batch manifest", "lastSeenAt": "2026-09-04T16:22:53.043173+00:00" }, { "category": "target-alias", "occurrences": 18, "unresolved": 11, "prevention": "使用当前模块主 probe;闭包预检可自动将 target 别名解析到实际目标。", "representativeCommand": "/bin/bash -lc 'cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && python3 tools/check_continuation_state.py && python3 tools/check_web_link_closure.py freecad-source/build-web/configure/bin FreeCADWebPartBoxProbe --json && test -f freecad-source/build-web/configure/bin/FreeCADWebPartBoxProbe.wasm && test -f freecad-source/build-web/configure/bin/FreeCADWebPartBoxProbe.js && echo ARTIFACTS_PRESENT'", "representativeError": "CONTINUATION_STATE_READY: active=FW-P6-FPA-Y phase=IMPLEMENT_BATCH mustContinue=true noFinalBeforeTerminate=true RESUME_COMMAND: python3 tools/continue_web_task_cycle.py {\"schema\": \"freecad-web-link-preflight/v1\", \"buildDirectory\": \"/home/mes123456/FreeCADWasmDev/working/FreeCAD/freecad-source/build-web/configure/bin\", \"target\": \"FreeCADWebPartBoxProbe\", \"errors\": [\"link rule not found for FreeCADWebPartBoxProbe\"], \"warnings\": []}", "lastSeenAt": "2026-09-08T09:12:35.896643+00:00" }, { "category": "shell-syntax", "occurrences": 9, "unresolved": 3, "prevention": "避免复杂内嵌 shell/Python 拼接,改用已有工具或独立脚本。", "representativeCommand": "/bin/bash -lc \"cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && python3 - <<'PY' import json, subprocess for key in ['3d7b87078eb7d59b5405']: cmd=json.load(open('docs/current/freecad-web-scheduler-failures.json'))['failures'][key]['command'] p=subprocess.run(cmd,shell=True,text=True,capture_output=True) print('key',key,'exit',p.returncode) print((p.stdout+'\\\\n'+p.stderr)[-2500:]) if p.returncode: raise SystemExit(p.returncode) PY\"", "representativeError": "key 3d7b87078eb7d59b5405 exit 2 /bin/bash: line 1: warning: here-document at line 1 delimited by end-of-file (wanted `PY') /bin/bash: -c: line 1: syntax error near unexpected token `(' /bin/bash: -c: line 1: `cd /home/mes123456/FreeCADWasmDev/working/FreeCAD && python3 - <<'PY' import json, subprocess, sys from pathlib import Path sys.path.insert(0, 'tools') import run_freecad_web_scheduler as sched keys=['d8adbe1d57f5337d2df4','5edf8e1a9fdd7a075e31','eb0aa522833316439ddc','d9af1131d2221d88009b','285fefc5661260434679','1a736f486824f4769b89','490b7cb48eb8ac5615ec','da3dc21fe80f404d135f'] ledger=json.loads(Path('docs/current/freecad-web-scheduler-failures.json').read_text())['failures'] fai...", "lastSeenAt": "2026-09-09T21:20:25.955072+00:00" }, { "category": "native-dispatch", "occurrences": 3, "unresolved": 1, "prevention": "先单条 native dispatcher 探针定位,再修共享 fixture,不重复整批 gate。", "representativeCommand": "/usr/bin/python3 tools/run_business_acceptance.py --reuse --module Points --ids Points:desktop:Points_Merge Points:desktop:Points_Structure Points:points.createRecompute Points:points.desktopBatch Points:points.saveReopen business-format:Points:export:.obj business-format:Points:import:.ply", "representativeError": "--- extracted business diagnostics --- {\"reason\": \"business-format:Points:import:.ply: AssertionError [ERR_ASSERTION]: {\\\"schema\\\":\\\"freecad-web-facade/v1\\\",\\\"version\\\":1,\\\"kind\\\":\\\"error\\\",\\\"requestId\\\":\\\"ply-102\\\",\\\"error\\\":{\\\"code\\\":\\\"native_dispatch_failed\\\",\\\"message\\\":\\\"Points desktop native dispatch failed\\\"}}\\n\\n'error' !== 'result'\\n\\n at importPoints (file:///home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/points-business-cases.mjs:96:18)\\n at async file:///home/mes123456/FreeCADWasmDev/working/FreeCAD/tools/points-business-cases.mjs:151:32\", \"status\": \"acceptance_incomplete\", \"exitCode\": 1, \"remaining\": [\"business-format:Points:import:.ply\"], \"evidencePath\": \"docs/current/b...", "lastSeenAt": "2026-09-09T20:22:32.639190+00:00" } ] }