New L1 module `dnut_interpreter` owns the shared lexer, the registry-driven
compiler, the compiled sequence model and the cross-frame interpreter. Domain
vocabularies are registered by the modules that own them; the core never
interprets a domain payload.
- `DnutLexer` / `DnutCompiler`: shared `.dnut` front end with statement-level
error recovery, skipping of non-`story` top-level blocks, and step legality
deferred entirely to the registry.
- `SequenceAsset` / `SequenceRuntime`: compiled sequence model plus a
cross-frame interpreter with call frames, a bounded execution budget, and
version-checked capture/restore of the cursor.
- `StepKindRegistry`: strict step validation that rejects undeclared fields and
runs the descriptor's own domain invariants.
- `rpg`: `RpgDialect` registers the RPG vocabulary (movement, animation, object
selection, skill/attribute/inventory/equipment changes) behind a Pimpl
boundary, so public headers stay free of cross-module includes.
- 17 unit tests across `test/dnut_interpreter.cpp` and `test/rpg_dialect.cpp`.
* feat(archspace): add Pascal-like architectural space editor domain
Introduce archspace as a document model separate from RTS building and
housegen, with editing DomainOperations, automation commands, mesh bake,
tests, and a thin example host.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* feat(archspace): make document editing and viewport bake path usable
Complete wall/opening/item helpers, opening cutout mesh bake, property undo
inverses, automation commands, and an example that uploads the baked mesh and
captures a screenshot as evidence the domain is more than a shell.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* docs(archspace): document ArchSpaceDocument script bindings
Source quality CI failed because newly bound ArchSpaceDocument methods were
missing from docs/usr/modules/archspace.md. Add an API quick reference that
covers every addFunc name.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* feat(archspace): bake catalog furniture and parametric opening reveals
Replace item marker boxes with multi-part catalog meshes, and carve wall
openings with merged cavities plus explicit reveal liners (not CSG/IFC).
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* feat(archspace): add wall, opening, and item placement editor tools
Interactive tools preview on move and commit DomainOperations through
IEditAuthority on pointer up, matching the building editor tool pattern.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* test(archspace): cover interactive tools, catalog bake, and reveals
Add authority-routed tool tests, assert reveal/catalog primitives, and
document the honest parametric opening + furniture catalog limits.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* feat(animation): add classical SMR skinned interaction retarget pass
Port the portable ideas from MeshRet/SMR (semantically consistent bone
sensors + dense interaction pairs) into an offline post-FK retarget
refine step that restores body-part proximity with two-bone IK, without
pulling in a neural runtime.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* feat(animation): MeshRet neural retarget via animation_tensor
Add L6 animation_tensor satellite that provides ISmrNeuralRetarget over
builtin tensor MeshRet and optional ONNX, with classical two-bone IK as
fallback when neural is disabled or unavailable.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* docs(animation): document AnimRetargetProfile getter bindings
Source quality's check_bindings --strict failed on six new getters
bound for SMR/MeshRet retarget that were missing from animation.md.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(animation): avoid new fallback-debt comment markers
Reword neural SMR Doxygen so classical IK is described as the active
path, keeping fallback-contract-inventory at baseline (budget 0).
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(ci): keep animation_tensor off web and skip Dawn LPM
animation_tensor in GROUP web pulled animation→model3d into the
Emscripten profile, which skips medialoader_model and then fails WASM
link. Restrict it to GROUP 3d.
Also force DAWN_BUILD_PROTOBUF/TINT fuzzers off so the Windows native
Dawn parity configure does not require a flaky libprotobuf-mutator
checkout.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>