2026-05-26 16:23:04 +00:00
|
|
|
{
|
|
|
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
|
|
|
"$id": "https://polisher-suite.local/schemas/job.schema.json",
|
|
|
|
|
"title": "Polisher Job Package",
|
|
|
|
|
"description": "Frozen planning artifact emitted by polisher-sim. Represents planning truth.",
|
|
|
|
|
"type": "object",
|
|
|
|
|
"required": [
|
|
|
|
|
"schema_version",
|
|
|
|
|
"job_id",
|
|
|
|
|
"mirror_id",
|
|
|
|
|
"machine_family",
|
|
|
|
|
"planner_version",
|
|
|
|
|
"created_at",
|
|
|
|
|
"strategy_summary",
|
|
|
|
|
"passes"
|
|
|
|
|
],
|
|
|
|
|
"properties": {
|
|
|
|
|
"schema_version": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"const": "job.v1"
|
|
|
|
|
},
|
|
|
|
|
"job_id": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"description": "Stable unique identifier for this job."
|
|
|
|
|
},
|
|
|
|
|
"mirror_id": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"machine_family": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"description": "Target machine family (e.g. swing-arm)."
|
|
|
|
|
},
|
|
|
|
|
"source_map_id": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"description": "Reference to the input surface measurement."
|
|
|
|
|
},
|
|
|
|
|
"target_id": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"description": "Reference to the target surface specification."
|
|
|
|
|
},
|
|
|
|
|
"created_at": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"format": "date-time"
|
|
|
|
|
},
|
|
|
|
|
"created_by": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"planner_version": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"description": "Software version of polisher-sim that generated this job."
|
|
|
|
|
},
|
|
|
|
|
"calibration_state_ref": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"description": "Reference to the calibration state used during planning."
|
|
|
|
|
},
|
|
|
|
|
"strategy_summary": {
|
|
|
|
|
"type": "object",
|
2026-06-02 15:40:16 +00:00
|
|
|
"required": [
|
|
|
|
|
"intent"
|
|
|
|
|
],
|
2026-05-26 16:23:04 +00:00
|
|
|
"properties": {
|
2026-06-02 15:40:16 +00:00
|
|
|
"intent": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
2026-05-26 16:23:04 +00:00
|
|
|
"confidence": {
|
|
|
|
|
"type": "number",
|
|
|
|
|
"minimum": 0,
|
|
|
|
|
"maximum": 1
|
|
|
|
|
},
|
2026-06-02 15:40:16 +00:00
|
|
|
"notes": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
}
|
2026-05-26 16:23:04 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"passes": {
|
|
|
|
|
"type": "array",
|
|
|
|
|
"minItems": 1,
|
|
|
|
|
"items": {
|
|
|
|
|
"$ref": "#/$defs/pass"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"predicted_outcome": {
|
|
|
|
|
"type": "object",
|
|
|
|
|
"description": "Summary of predicted post-polish surface state.",
|
|
|
|
|
"properties": {
|
2026-06-02 15:40:16 +00:00
|
|
|
"removal_rms_nm": {
|
|
|
|
|
"type": "number"
|
|
|
|
|
},
|
|
|
|
|
"removal_pv_nm": {
|
|
|
|
|
"type": "number"
|
|
|
|
|
},
|
2026-05-26 16:23:04 +00:00
|
|
|
"residual_zernikes": {
|
|
|
|
|
"type": "object",
|
2026-06-02 15:40:16 +00:00
|
|
|
"additionalProperties": {
|
|
|
|
|
"type": "number"
|
|
|
|
|
}
|
2026-05-26 16:23:04 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"uncertainty": {
|
|
|
|
|
"type": "object",
|
|
|
|
|
"description": "Planner's uncertainty estimates.",
|
|
|
|
|
"properties": {
|
|
|
|
|
"removal_rms_nm_range": {
|
|
|
|
|
"type": "array",
|
2026-06-02 15:40:16 +00:00
|
|
|
"items": {
|
|
|
|
|
"type": "number"
|
|
|
|
|
},
|
2026-05-26 16:23:04 +00:00
|
|
|
"minItems": 2,
|
|
|
|
|
"maxItems": 2
|
|
|
|
|
},
|
2026-06-02 15:40:16 +00:00
|
|
|
"notes": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
}
|
2026-05-26 16:23:04 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"attachments": {
|
|
|
|
|
"type": "array",
|
|
|
|
|
"items": {
|
|
|
|
|
"type": "object",
|
2026-06-02 15:40:16 +00:00
|
|
|
"required": [
|
|
|
|
|
"filename",
|
|
|
|
|
"role"
|
|
|
|
|
],
|
2026-05-26 16:23:04 +00:00
|
|
|
"properties": {
|
2026-06-02 15:40:16 +00:00
|
|
|
"filename": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"role": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"description": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
}
|
2026-05-26 16:23:04 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"$defs": {
|
|
|
|
|
"pass": {
|
|
|
|
|
"type": "object",
|
|
|
|
|
"required": [
|
|
|
|
|
"pass_id",
|
|
|
|
|
"sequence_index",
|
|
|
|
|
"duration_s",
|
|
|
|
|
"force_n",
|
|
|
|
|
"table_rpm",
|
|
|
|
|
"spindle_rpm",
|
2026-06-02 15:40:16 +00:00
|
|
|
"spindle_direction",
|
2026-05-26 16:23:04 +00:00
|
|
|
"motion_family"
|
|
|
|
|
],
|
|
|
|
|
"properties": {
|
2026-06-02 15:40:16 +00:00
|
|
|
"pass_id": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"sequence_index": {
|
|
|
|
|
"type": "integer",
|
|
|
|
|
"minimum": 1
|
|
|
|
|
},
|
|
|
|
|
"objective": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"preset_name": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"duration_s": {
|
|
|
|
|
"type": "number",
|
|
|
|
|
"minimum": 0
|
|
|
|
|
},
|
|
|
|
|
"force_n": {
|
|
|
|
|
"type": "number",
|
|
|
|
|
"minimum": 0
|
|
|
|
|
},
|
|
|
|
|
"table_rpm": {
|
|
|
|
|
"type": "number",
|
|
|
|
|
"minimum": 0
|
|
|
|
|
},
|
|
|
|
|
"spindle_rpm": {
|
|
|
|
|
"type": "number",
|
|
|
|
|
"minimum": 0
|
|
|
|
|
},
|
|
|
|
|
"motion_family": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
2026-05-26 16:23:04 +00:00
|
|
|
"motion_params": {
|
|
|
|
|
"type": "object",
|
|
|
|
|
"additionalProperties": true
|
|
|
|
|
},
|
2026-06-02 15:40:16 +00:00
|
|
|
"zone": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"dither_profile": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
2026-05-26 16:23:04 +00:00
|
|
|
"force_modulation": {
|
|
|
|
|
"type": "object",
|
|
|
|
|
"properties": {
|
2026-06-02 15:40:16 +00:00
|
|
|
"harmonic": {
|
|
|
|
|
"type": "integer"
|
|
|
|
|
},
|
|
|
|
|
"amplitude_n": {
|
|
|
|
|
"type": "number"
|
|
|
|
|
},
|
|
|
|
|
"phase_deg": {
|
|
|
|
|
"type": "number"
|
|
|
|
|
}
|
2026-05-26 16:23:04 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"acceptance": {
|
|
|
|
|
"type": "object",
|
|
|
|
|
"additionalProperties": true
|
|
|
|
|
},
|
2026-06-02 15:40:16 +00:00
|
|
|
"notes": {
|
|
|
|
|
"type": "string"
|
|
|
|
|
},
|
|
|
|
|
"spindle_direction": {
|
|
|
|
|
"type": "string",
|
|
|
|
|
"enum": [
|
|
|
|
|
"cw",
|
|
|
|
|
"ccw"
|
|
|
|
|
],
|
|
|
|
|
"description": "Requested toolhead spindle rotation direction using the same physical convention as polisher-control."
|
|
|
|
|
}
|
2026-05-26 16:23:04 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|