Record verified LightBurn project MOPA serialization evidence

This commit is contained in:
Codex 2026-10-24 12:46:13 +02:00
parent 63f695fb85
commit 4024d14897
5 changed files with 69 additions and 10 deletions

View file

@ -43,12 +43,16 @@ are preserved and analyzed. The operator confirmed a 110 mm lens; local test
projects are unverified and must not be used as working-project evidence. See
the [local settings acquisition](docs/research/lightburn-local-settings-2026-10-24.md).
Two operator-verified projects now establish project-level `frequency` and
`QPulseWidth` serialization; see the
[verified-project analysis](docs/research/lightburn-verified-projects-2026-10-24.md).
Missing pulse width still requires explicit resolution before executable import.
The offline M1 reuse proofs now pass as one consolidated acceptance checkpoint:
the Rayforge/MeerK40t path has deterministic mock encoding, fail-closed JCZ
profile and parameter gates, list buffering, cancellation/recovery, layer and
recipe semantics, and a transport-free workflow preview. The remaining gates
are a private known-working `.lbrn2` project and a reviewed Windows GTK runtime
for the packaged no-device workflow test. See the
recipe semantics, and a transport-free workflow preview. A reviewed Windows GTK
runtime and the packaged no-device workflow test remain outstanding. See the
[Phase 0 status](docs/status/phase-0.md) and
[Rayforge GUI preflight](docs/research/rayforge-windows-gui-preflight.md).

View file

@ -53,9 +53,12 @@ python scripts/check_public_repo.py .
The closed-application local settings directory is now preserved and hashed in
PrivateStash; see `docs/research/lightburn-local-settings-2026-10-24.md`.
The operator confirmed a 110 mm installed lens. Local project candidates are
unverified test files and must not be used; temporary copies were removed
before analysis or commit. No known-working project was collected.
The operator confirmed a 110 mm installed lens. General local project candidates
remain excluded as unverified. The operator subsequently selected two specific
successful projects; their verified private copies establish project-level
`frequency` and `QPulseWidth` serialization. See
`docs/research/lightburn-verified-projects-2026-10-24.md`. One layer omits
`QPulseWidth`; its effective default remains unresolved.
M1 is not complete. Do not describe the repository as a finished desktop
application until both gates below have real evidence:
@ -63,8 +66,9 @@ application until both gates below have real evidence:
1. A Windows artifact for the pinned Rayforge revision must be produced on a
reviewed build runner, verified without execution, and pass the manual
no-device desktop checklist.
2. A known-working private JPT `.lbrn2` project must establish how project-level
frequency and `QPulseWidth` are serialized before those fields are mapped.
2. The known-working private JPT `.lbrn2` serialization evidence gate is met.
Import mapping still requires explicit unit conversion and fail-closed
handling of absent pulse width, with synthetic offline tests.
Raw projects, screenshots containing identifiers, machine data and build
binaries stay out of the public repository.
@ -81,8 +85,9 @@ order:
4. `scripts/validate_m1_manual_acceptance.py`.
If no artifact is available, do not install a build environment here. The next
useful input is the private known-working `.lbrn2` collection or Kaz's explicit
decision on ADR 0003. The M3 protocol can also be reviewed offline, but its
offline implementation task is evidence-backed MOPA import mapping with
synthetic tests; Kaz's explicit decision on ADR 0003 is also outstanding.
The M3 protocol can also be reviewed offline, but its
operation allowlist must stay empty until exact read-only request evidence is
available. Until the external gates and separate hardware approval arrive,
ADR 0002 remains Proposed and no controller backend, USB endpoint access,

View file

@ -0,0 +1,47 @@
# Operator-verified LightBurn projects
- Date: 2026-10-24
- Provenance: two files explicitly selected by the operator as successfully tested
- Scope: byte-preserving acquisition and offline XML analysis; no hardware access
The two explicitly supplied files supersede the earlier exclusion only for
these selected originals. Other unverified local projects remain excluded.
Raw geometry, names, paths and complete settings remain in PrivateStash.
Both copied files were verified against their originals with SHA-256.
See [public manifest](../../evidence/public-lightburn-verified-projects.jsonl).
Both roots are `LightBurnProject`, with `AppVersion="2.1.03"` and
`FormatVersion="1"`. Process settings occur as direct children of
`CutSetting`, with numeric strings in a `Value` attribute.
| Artifact ID | Layer type | Raw `frequency` | Raw `QPulseWidth` |
| --- | --- | ---: | ---: |
| `sha256-1e1ec8441cc23ee997a6` | Scan | 200000 | absent |
| `sha256-1e1ec8441cc23ee997a6` | Cut | 80000 | 180 |
| `sha256-1e1ec8441cc23ee997a6` | Scan | 1000000 | 10 |
| `sha256-0807d2a2d1613e1aff90` | Scan | 1000000 | 10 |
| `sha256-0807d2a2d1613e1aff90` | Cut | 80000 | 180 |
| `sha256-0807d2a2d1613e1aff90` | Scan | 1000000 | 10 |
All four Scan settings also have `crossHatch Value="1"`. These are stored
layer settings, not independent proof of which settings emitted on a machine.
Successful operation is the operator's statement; it was not replayed here.
## Import implications
This closes the missing operator-verified project serialization evidence gate:
`frequency` and case-sensitive `QPulseWidth` are now observed in actual
projects, consistent with the earlier device export findings.
The absent pulse-width field must remain distinguishable from zero or an
explicit value. Its effective LightBurn default or inheritance is not established
by this inspection. An importer must preserve absence and require an explicit,
validated resolution before a MOPA job can become executable.
These raw values do not independently establish units, safe ranges, calibration
or device identity. The next implementation should use synthetic geometry and
test explicit unit conversions, field absence and invalid values. It must not
copy private project geometry into public fixtures or enable hardware access.
The reviewed Windows artifact and manual no-device desktop acceptance remain
open. ADR 0002 remains Proposed until those gates have also passed.

View file

@ -0,0 +1,2 @@
{"analysis_refs": ["docs/research/lightburn-verified-projects-2026-10-24.md"], "artifact_id": "sha256-1e1ec8441cc23ee997a6", "classification": "private-sensitive", "media_type": "application/octet-stream", "observed_at_utc": "2026-10-24T10:44:44.053873Z", "origin": "operator-confirmed successful JPT LightBurn projects", "sha256": "1e1ec8441cc23ee997a61d70592d1e8fa3035d3541729abf5a89f73c7f3aa528", "size_bytes": 202189}
{"analysis_refs": ["docs/research/lightburn-verified-projects-2026-10-24.md"], "artifact_id": "sha256-0807d2a2d1613e1aff90", "classification": "private-sensitive", "media_type": "application/octet-stream", "observed_at_utc": "2026-10-24T10:44:44.053873Z", "origin": "operator-confirmed successful JPT LightBurn projects", "sha256": "0807d2a2d1613e1aff90294fe515d7a26aa2df9ba214b77fd1990ba315bea9d1", "size_bytes": 1198348}

View file

@ -52,6 +52,7 @@ class PublicEvidenceTests(unittest.TestCase):
"public-installer-configs.jsonl": 9,
"public-lightburn-exports.jsonl": 4,
"public-lightburn-local-settings.jsonl": 1,
"public-lightburn-verified-projects.jsonl": 2,
}
actual = {
path.name: len(path.read_text(encoding="utf-8").splitlines())