61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# M12-07E Status
|
|
|
|
status: done
|
|
task: STL normal, unit, degenerate-triangle, and trailing-byte parity
|
|
updated: 2026-08-18 America/New_York
|
|
enablingTask: false
|
|
parityStateChange: false
|
|
|
|
## Scope
|
|
|
|
The bounded STL protocol requires an explicit binary/ASCII variant and positive unit scale. It parses
|
|
facet normals and vertices, applies the scale, removes zero-area triangles the same way as Blender's
|
|
validated import, and rejects binary payload after the declared triangle table with
|
|
`STL_TRAILING_BYTES`. Desktop Blender accepts that trailing fixture as an empty mesh, so the report
|
|
records `STRICTER_WEB_BLOCK` rather than claiming exact parity for that edge case.
|
|
|
|
## Evidence
|
|
|
|
- The deterministic edge generator derived a one-degenerate-triangle binary and a four-trailing-byte
|
|
binary from M12-07D. Pinned Blender 5.2 was probed at unit scales 1 and 0.001 and against both edge
|
|
files; it preserves normals, scales world bounds by 1000, removes one degenerate triangle, and
|
|
accepts the trailing fixture as an empty mesh.
|
|
- `node --test web/tests/unit/stl-import.test.mjs` passed 2/2 for binary/ASCII normals, explicit unit
|
|
scaling, degenerate removal, trailing-byte rejection, and invalid scale.
|
|
- `CHROME_PATH=/usr/bin/google-chrome-stable WEB_TEST_PORT=5463 node_modules/.bin/playwright test
|
|
--config playwright.config.ts --workers=1 tests/e2e/stl-edge-parity.spec.ts` passed 1/1 in Chrome
|
|
150. Normal comparison is exact, Web/Desktop unit ratio matches within Float32 tolerance, and both
|
|
retain one triangle after degenerate removal.
|
|
- `node tools/web/check-stl-edge-parity.mjs` passed:
|
|
`stl-edge-parity-ok normals=exact unitRatio=1000 degenerate=removed trailing=STRICTER_WEB_BLOCK next=M12-07F`.
|
|
- Typecheck and `git diff --check` passed. The stricter trailing-byte policy leaves N-023 full parity
|
|
blocked and does not expose an STL UI route.
|
|
|
|
## Artifact Hashes
|
|
|
|
- parent manifest: `bbc78e47f389562e7d648bf49c9b3bf8a08aaa36e914589a6eab0a1f6e72748d`
|
|
- fixture generator/desktop probe: `018013347642603c21237ebb023bdc7a4e338f5a3f875fea536a996eb121e716` /
|
|
`b3d6ea197ef77b5a14f60f5e6b43d4392e943ff5d56acf73915507fc9a4161b7`
|
|
- protocol/Worker: `87eec72e2b8aa7ad0b168ca0ee8c4016c941f56f5f1ac53aa5fe71d0832f1dd8` /
|
|
`d714f1f3a218a2226dd349aea81c6c54efa6246de1c4fe51aaa9f5c352ef44fc`
|
|
- unit/Chromium/checker: `4af52833486421c017f3af2b833b0776e60a6ab57ed66fea2161cf9674f4b243` /
|
|
`121d348250e26d29ad966f7427bbef9da77de2098e2e305827b11aae52002c5c` /
|
|
`b5ed7fbb41bb46fba982d5726cb8c3eaecf360b772a01d6337c309b1c4a4f535`
|
|
- fixture/desktop/Web reports: `545463a984356d6635cbaae3865d13fe95bd2d841c394ac9ddff496c95d46f18` /
|
|
`2d3028a3b7d97f39654cff5fcef1d0c1c71e9f2d08e3e29c2e926651ed3860f1` /
|
|
`e0686cc9be3b68e564651207443e0ebf3e3b0eb3d07a32915b03f44b1908357b`
|
|
- degenerate/trailing fixtures: `c120bb0f218819eb89a3607c0b4f8fafd9afb599402e3b21deaa3b2be143e7d0` /
|
|
`0a30aab6db1588722067000e2a08c3c6206a8ed5b7531caa0b082723700a3681`
|
|
- package: `cfb232baa494ff59f6c8d65514a08c86332ee9354350b2a0392b6f932a7ee42c`
|
|
- manifest: `19a9f460d1b939c9504dadd364cb87dab3b1769b0599035e2d2b51b47091e034`
|
|
|
|
## Next Task
|
|
|
|
`M12-07F`: STL Web-to-desktop round-trip and material-loss report.
|
|
|
|
## Rollback
|
|
|
|
Remove the STL edge fixtures, probes, parser, Worker, tests, reports, checker, manifest, and this status
|
|
entry. Restore M12-07D as the queue tail and move the machine queue back to M12-07E. No parity ledger
|
|
rollback is required.
|