Fix broken v2 bambulab schema refs, wire up v2 dispatchers, fix PrintJobStatus JSON mismatch

- v2/common/device/device.schema.json: stray backtick in bed $ref broke resolution
- v2/report/print/print.schema.json: ams $ref pointed at wrong path (missing ams/ subdir)
- v2/common/device/plate.schema.json: $id was copy-pasted from bed.schema.json
- Add v2/request.schema.json and v2/report.schema.json dispatchers - v2's leaf
  schemas were unreachable without them, same oneOf convention as v1
- Rewrite schemas/bambulab/README.md layout section, which still described
  v1's pre-rename paths and claimed v2 was removed
- PrintJob.status serialized as a raw i32 in Rust (prost stores proto3 enums
  as i32) while ts-types' TypeBox schema validates full enum name strings -
  add serde with= on the field so Rust JSON matches TS and protobuf's own
  canonical JSON enum mapping, plus a regression test
This commit is contained in:
2026-08-31 13:50:51 +00:00
parent 1b23c58eb6
commit 51dba8e896
10 changed files with 151 additions and 15 deletions
+42 -12
View File
@@ -11,7 +11,8 @@ any Rust to do it.
```
bambulab/
envelope.schema.json the base - sequence_id + command, shared by
common/
envelope.schema.json the base - sequence_id + command, shared by
every command in every generation, so it lives
here unversioned, not duplicated under v1/v2
v1/
@@ -19,6 +20,18 @@ bambulab/
("info", "pushing", ...), each a oneOf (a
category can have more than one request shape)
report.schema.json BambuReport dispatcher, same idea
common/ shapes shared across v1's request/ and report/
ams/
ams.schema.json
ams_unit.schema.json
ams_tray.schema.json
vt_tray.schema.json shared base for AmsTray + the virtual/
external spool slot, via allOf + $ref
module_info.schema.json
hms.schema.json, net.schema.json, online.schema.json,
upload.schema.json, upgrade_state.schema.json, xcam.schema.json,
ipcam.schema.json, lights_report.schema.json, nozzle_type.schema.json,
nozzle_diameter.schema.json
request/
info/
get_version.schema.json
@@ -27,21 +40,38 @@ bambulab/
report/
info/
get_version.schema.json
_module_info.schema.json
print/
print.schema.json the ongoing print-state push
_ams.schema.json
_ams_unit.schema.json
_ams_tray.schema.json
_vt_tray.schema.json shared base for AmsTray + the virtual/
external spool slot, via allOf + $ref
_upgrade_state.schema.json
_xcam.schema.json
v2/ add the same split once V2's wire format is
known to differ from V1's - removed for now
rather than leave broken copy-pasted stubs
v2/ same split as v1, once the wire format actually
diverges per field - built out below as that's
been confirmed, not copy-pasted speculatively
request.schema.json dispatcher, same shape as v1's
report.schema.json dispatcher, same shape as v1's
common/ v2 grew a much larger shared shape set than v1
(device/, job/, care, info, ...) because more
of the wire format has been captured/confirmed
ams/, device/, job/, and the same flat common/*.schema.json files
as v1 (hms, net, online, upload, upgrade_state, xcam, ipcam,
lights_report, nozzle_type, nozzle_diameter, vt_tray)
request/
info/
get_version.schema.json
report/
info/
get_version.schema.json
_module_info.schema.json
print/
print.schema.json the ongoing print-state push (command
"push_status")
_2d_report.schema.json, _3d_report.schema.json,
_nozzle_type.schema.json
```
Add a category to a dispatcher (`v1|v2/request.schema.json` or
`report.schema.json`) whenever a new `request/<category>/` or
`report/<category>/` schema is added on disk - an unwired leaf schema is
unreachable from validation even though it parses fine on its own.
**One real correction baked into this layout**: the report category for
whatever a `pushall` request triggers is `report/print/`, not
`report/pushing/`. Sending `pushall` (which *does* go to the `pushing` key
@@ -6,7 +6,7 @@
"type": "object",
"properties": {
"airduct": { "$ref": "./airduct.schema.json" },
"bed": { "$ref": "./bed.schema.json`" },
"bed": { "$ref": "./bed.schema.json" },
"cam": { "$ref": "./cam.schema.json" },
"ctc": { "$ref": "./ctc.schema.json" },
"ext_tool": { "$ref": "./ext_tool.schema.json" },
@@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/bed.schema.json",
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/common/device/plate.schema.json",
"title": "DevicePlate",
"description": "Detailed info about Plate",
"type": "object",
+22
View File
@@ -0,0 +1,22 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/report.schema.json",
"title": "BambuReportV2",
"description": "V2 equivalent of v1/report.schema.json - same 'what root key does this arrive under' convention (see v1/report.schema.json for the print-vs-pushing rationale). Only wires categories that actually have a v2 schema on disk; add a property here when a new v2/report/<category>/ schema is added.",
"type": "object",
"minProperties": 1,
"maxProperties": 1,
"properties": {
"info": {
"oneOf": [
{ "$ref": "report/info/get_version.schema.json" }
]
},
"print": {
"oneOf": [
{ "$ref": "report/print/print.schema.json" }
]
}
},
"additionalProperties": false
}
@@ -12,7 +12,7 @@
"2D": { "$ref": "./_2d_report.schema.json" },
"3D": { "$ref": "./_3d_report.schema.json" },
"ams": { "$ref": "../../common/ams.schema.json" },
"ams": { "$ref": "../../common/ams/ams.schema.json" },
"hms": { "$ref": "../../common/hms.schema.json" },
"lights_report": { "$ref": "../../common/lights_report.schema.json" },
"upgrade_state": { "$ref": "../../common/upgrade_state.schema.json" },
+17
View File
@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://git.octoturge.com/Continuum/continuum-schemas/raw/branch/main/schemas/bambulab/v2/request.schema.json",
"title": "BambuRequestV2",
"description": "V2 equivalent of v1/request.schema.json - one JSON key naming the category, each a oneOf to leave room for more than one request shape per category. Only wires categories that actually have a v2 schema on disk; add a property here when a new v2/request/<category>/ schema is added.",
"type": "object",
"minProperties": 1,
"maxProperties": 1,
"properties": {
"info": {
"oneOf": [
{ "$ref": "request/info/get_version.schema.json" }
]
}
},
"additionalProperties": false
}