asdftools DWG preview 1.0.0 (GPL-3.0-or-later)

Runtime files: public/assets/dwg-viewer-20261028.js and .css,
public/assets/vendor/dwg-1.0.0/{geometry.js,dwg.worker.js,package.json},
unmodified @mlightcad/libredwg-web 0.8.2 dist and wasm directories.
PHP integration: app/data/tools-cad.php, dwg-viewer.json,
app/views/dwg-workspace.php; catalogue/editorial/template additions are included
in the source archive for modification and rebuilding the integrated module.

Node >=20: cd bin/dwg-viewer; npm ci --ignore-scripts
From repository root: node bin/dwg-viewer/vendor.mjs
Downloads pinned public upstream source and public test fixtures. Does not read
credentials or user drawings, connect to SSH, or deploy. Review source checksum
in vendor.lock.json. Runtime files are plain, editable JavaScript modules, not
minified custom bundles. No build step is required for our geometry/UI sources.
The upstream archive contains bindings/javascript/README.md with its Emscripten
C/WASM and TypeScript build instructions. The NPM package-lock pins distribution
integrity; source archive and runtime hashes are pinned in vendor.lock.json.

Testing: node bin/dwg-viewer/probe.mjs
py bin/dwg-viewer/check.py --run UNIQUE [--base http://127.0.0.1:8826]
Browser tests use locally installed Edge and Python Playwright. The public
fixture corpus and synthetic geometry contain no user drawings. No upload/API
service is part of this viewer. A PHP 8.2 local server serves the existing app.

Limitations: basic 2D shapes/blocks only; approximate curves and browser fonts;
no editing, saving, export, precision measurement, layouts, xrefs or 3D solids.
The model is bounded and malformed/unsupported content is rejected or warned.
Untrusted model text never becomes HTML or an external resource URL.
