{
  "schemaVersion": 1,
  "scope": "freecad-private-naming-and-parameter-followup",
  "orderedTasks": [
    {
      "id": "SDK-01",
      "title": "Lock candidate FreeCAD wasm SDK baseline and build boundary",
      "status": "completed",
      "dependencies": [],
      "deliverables": ["Pinned source/toolchain plan", "Candidate-only build-plan checker"],
      "acceptance": ["FreeCAD commit and Emscripten version are verified", "Production publication remains false"],
      "evidence": ["check:freecad-wasm-sdk-build-plan"]
    },
    {
      "id": "SDK-02A",
      "title": "Build the Qt wasm modules required by FreeCAD",
      "status": "completed",
      "dependencies": ["SDK-01"],
      "deliverables": ["Qt Core/Concurrent/Network/Xml archives", "Qt bundled Pcre2/ZLIB archives"],
      "acceptance": ["Every archive contains only wasm32 objects", "Thread support is enabled for QtConcurrent"],
      "evidence": ["check:freecad-naming-sdk-readiness"]
    },
    {
      "id": "SDK-02B",
      "title": "Build remaining wasm dependencies and FreeCADBase/App/Part archives",
      "status": "completed",
      "dependencies": ["SDK-02A"],
      "deliverables": ["Python/ICU/Xerces/yaml-cpp/fmt wasm dependencies", "FreeCADBase/FreeCADApp/Part static archives"],
      "acceptance": ["No host ELF member is present", "CMake configuration performs no implicit network fetch"],
      "evidence": ["build:freecad-naming-sdk-candidate", "check:freecad-naming-sdk-readiness"]
    },
    {
      "id": "SDK-04",
      "title": "Implement an isolated real FreeCAD private naming bridge",
      "status": "completed",
      "dependencies": ["SDK-02B"],
      "deliverables": ["Three versioned callback implementations", "MappedNameRef/StringHasher/ElementMap2 runtime evidence"],
      "acceptance": ["Candidate bridge passes strict Web validation", "Candidate is not published to the production Worker"],
      "evidence": ["build:freecad-naming-bridge-candidate", "test:freecad-naming-bridge-candidate", "check:freecad-naming-bridge-candidate", "check:freecad-private-naming-boundary"]
    },
    {
      "id": "SDK-03",
      "title": "Generate and verify the complete SDK manifest",
      "status": "completed",
      "dependencies": ["SDK-02B", "SDK-04"],
      "deliverables": ["Hashed manifest", "Private header and symbol audit"],
      "acceptance": ["Manifest generator completes without missing inputs", "Complete SDK checker passes"],
      "evidence": ["generate:freecad-naming-sdk-manifest", "check:freecad-naming-sdk"]
    },
    {
      "id": "SDK-05",
      "title": "Link and probe a candidate OCCT Worker",
      "status": "completed",
      "dependencies": ["SDK-03", "SDK-04"],
      "deliverables": ["Candidate Worker artifact", "Real Chrome callback and builder-history evidence"],
      "acceptance": ["All three callbacks are exported together", "Invalid or incomplete evidence fails closed"],
      "evidence": ["build:freecad-naming-worker", "test:freecad-naming-worker-candidate", "test:chrome-freecad-naming-worker-candidate", "check:chrome-freecad-naming-worker-candidate"]
    },
    {
      "id": "PAR-01",
      "title": "Expand Datum/Attachment/ShapeBinder, multi-Body and parameter combinations",
      "status": "completed",
      "dependencies": ["SDK-05"],
      "deliverables": ["Native oracle corpus", "Edit/recompute/recovery/FCStd round-trip matrix"],
      "acceptance": ["Every family has success and failure evidence", "Support/Tip/references survive mutation without silent rebinding"],
      "evidence": ["check:freecad-sketcher-partdesign-abi", "check:freecad-partdesign-structure", "check:freecad-attachment-modes", "check:freecad-attachment-combinations", "check:freecad-xlink-relink", "check:chrome-partdesign-lifecycle", "check:chrome-partdesign-reference-lifecycle"]
    },
    {
      "id": "QA-01",
      "title": "Close CI, offline-resource and browser matrix for the new production path",
      "status": "pending",
      "dependencies": ["PAR-01"],
      "deliverables": ["Execute/check-separated CI lanes", "Offline SDK resources", "Chrome/Firefox/WebKit reports"],
      "acceptance": ["Static reports cannot substitute for live harnesses", "A clean offline restore can rebuild and verify the candidate"],
      "evidence": ["ci:real:chrome", "ci:check:chrome", "offline:smoke", "check:browser-matrix"]
    }
  ],
  "boundary": {
    "freecadNamingBuildStatus": "production-linked",
    "exTsn02": "completed",
    "systemExact": false,
    "productionWorker": {
      "availability": "available",
      "callbacks": ["freecadNamingAbiVersion", "freecadNamingCapabilitiesJson", "freecadNamingEvidenceJson"]
    }
  }
}
