2.5 KiB
Rayforge synthetic LightBurn JCZ device-import spike
- Date: 2026-10-19
- Rayforge commit:
c28918c87f8273dd1d244f5a057addc192807fa5 - Fixture: synthetic public
.lbdev; no machine identifiers - Scope: device-profile importer only, with no discovery or transport
Result
Pinned Rayforge parses the synthetic JCZFiber profile and preserves its
display name, 110 x 110 mm work area and generic home-on-start value. It does
not select a driver because its LightBurn driver map has no JCZFiber entry.
The imported DeviceProfile also has no representation of the observed
RequireFrameBeforeStart setting or the synthetic cut-list frequency and
QPulseWidth fields. The import is therefore explicitly classified as unsafe
for JCZ use rather than receiving guessed defaults.
The external addon now supplies the narrow profile seam missing from Rayforge
core. It recognizes only the explicit public synthetic profile identity,
requires JCZFiber, positive work-area dimensions and
RequireFrameBeforeStart: true, and associates the result only with
PirateRayJCZNoDeviceDriver. Frequency and QPulseWidth remain raw
observations with unverified serialized-unit conversion. Encoding remains
blocked because the physical profile, lens/correction match, project
serialization and machine-specific limits are not yet verified.
The checked result is
tests/fixtures/rayforge-lightburn-device-import.json. Two runs produced the
same SHA-256 digest,
94f0d17837471399334a82c84558985d35da0f1a8eee6a176eb02d57ae3aeb18.
Evidence boundary
The fixture uses field names already recorded by the sanitized LightBurn device-export analysis. Its values are synthetic examples inside observed ranges, not a copy of a private export and not certified machine limits or material settings. It deliberately omits private GUIDs, source paths and unpublished connection serialization.
This spike characterizes the current importer and proves the smallest mapping
at the external-addon boundary. It does not change Rayforge core or silently
map JCZFiber to a G-code or Ruida driver.
Reproduce
Run against the pinned Rayforge checkout:
python scripts/spike_rayforge_lightburn_device_import.py C:\path\to\rayforge
Next seam
The next extension is offline controller-list buffering and explicit safe
state ordering. Cut-list recipes and project-layer QPulseWidth mapping remain
gated until a known-working .lbrn2 fixture establishes project serialization.
No USB enumeration, controller command, motion, framing or emission occurred.