{
  "_meta": {
    "note": "Engineering annotations for the Project 1 part viewer. Copy is factual spec language — hotspots communicate how the part is inspected and how it fits. Positions are in MODEL space, metres, matching the generated geometry (see tools/gen_cnc_parts.py). Positions are close; nudge in Playwright until each sits on its feature, then persist.",
    "position_units": "metres (model space)"
  },

  "precision-flange": [
    {
      "id": "bore",
      "label": "Centre bore — Ø40 H7",
      "detail": "Bored and reamed to an H7 fit (+0.025 / 0) so the mating spigot locates with no play. Concentric to the bolt circle within 0.05 mm.",
      "position": "0.021 0.020 0",
      "normal": "0 1 0"
    },
    {
      "id": "face",
      "label": "Raised face — flatness 0.05",
      "detail": "The sealing face is finish-faced flat within 0.05 mm and left at a controlled Ra so a gasket seats without a leak path.",
      "position": "0.026 0.020 0",
      "normal": "0 1 0"
    },
    {
      "id": "bolt-circle",
      "label": "Bolt circle — 6 × Ø11 on Ø90",
      "detail": "Six holes on a Ø90 bolt circle, drilled in the same setup as the bore so true position holds to ±0.1 mm. That is what lets the joint bolt up without reaming on assembly.",
      "position": "0.045 0.018 0",
      "normal": "0 1 0"
    },
    {
      "id": "hub",
      "label": "Turned hub & OD",
      "detail": "Hub and outside diameter turned in one chucking with the bore, so the whole part runs concentric. OD 120 mm.",
      "position": "0.060 0.005 0",
      "normal": "1 0 0"
    }
  ],

  "turned-shaft": [
    {
      "id": "journal",
      "label": "Bearing journal — Ø25 g6",
      "detail": "Ground to a g6 shaft fit (−0.007 / −0.020) at Ra 0.8 µm — it drops straight into a standard bearing bore. Runout held to 0.02 mm TIR over the journal.",
      "position": "0.0125 0.086 0",
      "normal": "1 0 0"
    },
    {
      "id": "groove",
      "label": "Retaining groove — Ø23 × 1.6",
      "detail": "Single-point turned groove for a circlip that locates the bearing axially. Corner radius controlled so it is not a fatigue riser.",
      "position": "0.0115 0.100 0",
      "normal": "1 0 0"
    },
    {
      "id": "keyway",
      "label": "Keyway — 6 × 3.5",
      "detail": "Milled with live tooling on the same machine as the turning — no second setup, no re-clocking. Transmits torque to the pulley or gear on the nose.",
      "position": "0 0.146 0.010",
      "normal": "0 0 1"
    },
    {
      "id": "nose",
      "label": "Ø20 nose & chamfer",
      "detail": "Lead-in chamfer turned on the nose so the mating hub starts square and does not gall the journal on assembly.",
      "position": "0.010 0.158 0",
      "normal": "1 0 0"
    }
  ],

  "manifold-block": [
    {
      "id": "main-bore",
      "label": "Main gallery — Ø25 H8",
      "detail": "The primary flow gallery, bored through the billet to an H8 fit. Every cross-port breaks into this bore — the intersection is where deburring matters.",
      "position": "0.050 0.025 0",
      "normal": "1 0 0"
    },
    {
      "id": "port",
      "label": "Threaded cross port — G1/4",
      "detail": "Drilled to intersect the main gallery, then tapped G1/4 BSPP. The cross-drilled intersection is the classic feature a section cut finally makes visible.",
      "position": "0.025 0.025 0.035",
      "normal": "0 0 1"
    },
    {
      "id": "cbore",
      "label": "Counterbored fixing hole",
      "detail": "Four Ø9 mounting holes, counterbored Ø14 so the cap screw heads sit flush with the top face.",
      "position": "0.038 0.050 0.026",
      "normal": "0 1 0"
    },
    {
      "id": "edge",
      "label": "Milled faces & 0.3 edge break",
      "detail": "All faces milled flat and every edge broken 0.3 mm — no sharp corners to nick an O-ring or a hand on the bench.",
      "position": "0 0.050 0",
      "normal": "0 1 0"
    }
  ],

  "machined-bracket": [
    {
      "id": "slot",
      "label": "Adjustment slot — 10 × 20",
      "detail": "Milled slots give the installer ±5 mm of travel so the bracket can be aligned on the machine, not on the drawing.",
      "position": "0.030 0.010 0.010",
      "normal": "0 1 0"
    },
    {
      "id": "gusset",
      "label": "Gusset rib — R6 fillet",
      "detail": "A machined gusset stiffens the right-angle joint without a weld. The R6 fillet at the root keeps stress out of the corner.",
      "position": "0.005 0.030 -0.015",
      "normal": "1 0 0"
    },
    {
      "id": "fixing",
      "label": "Fixing hole — Ø9",
      "detail": "Two Ø9 holes in the upright, true-positioned to ±0.13 mm so the bracket bolts to a fixed pattern.",
      "position": "0.020 0.045 -0.030",
      "normal": "0 0 1"
    },
    {
      "id": "datum",
      "label": "Datum face — flatness 0.1",
      "detail": "The base is milled flat within 0.1 mm — the mounting datum the whole assembly references.",
      "position": "0 0.010 0.025",
      "normal": "0 1 0"
    }
  ]
}
