mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
fix: close both code-review mediums and drop the dead paper layer (#302 r1 M1,M2)
**M1.** `docs/WALL-THICKNESS.md` §3 «Junction nodes» переписан под решение №5: полный mitre, фаска #249 в отставке, `bevelMultiWallBody` — только адресный латеральный трим. Прежний абзац описывал отменённое утреннее решение. **M2.** Guard мутанта `junction-fans-disabled` собирает `test-build` и бандл перед смоком: `smoke_junction_holes` — единственный смок, импортирующий из `test-build`, и в чистом worktree он падал `ERR_MODULE_NOT_FOUND` до применения мутации. Ревью прав: после переякорения guard'а на смок я не перегнал его штатным харнесом — только ручной test-build-патч, который worktree не видит. **Low + следствие.** `bevelMultiWallPaper` удалена как мёртвый код; следом измерено (фикстура #197 и репро владельца — байт в байт с веерами и без), что и `paperWithNodeCorners` бумаге ничего не даёт: footprint ∪ shell уже покрывает каждый узел. Слой удалён целиком, бумага возвращена к rawPaper. Осиротевший мутант `multi-wall-paper-full-origin-cut` (#261, «белый клин от вычитающего разреза бумаги») снят с обоснованием: в бумаге не осталось ни одного вычитания — этот класс регресса невозможен по построению. `npm test` 1303/1303; `golden:verify` 126/126; контракт-проба репро — 0. Issue: #302 User-Visible: no
This commit is contained in:
+15
-12
@@ -185,18 +185,21 @@ excluded from this shared `roomGeom`, so a door does not change the room fill
|
||||
and a detached body cannot punch it. Full and Static render paths reuse the same
|
||||
structural cache instead of rebuilding wall booleans once per room.
|
||||
|
||||
**Junction nodes (#302).** A degree-3+ node keeps the approved #249 chamfer
|
||||
(`bevelMultiWallBody`, bounded by the node's join limit
|
||||
`MULTI_WALL_JOIN_LIMIT × halfDepth`), and AFTER it the node additively gets
|
||||
back what a chamfer must never eat: the exact support quads of its rays (each
|
||||
bounded by its own finite length, so a trimmed lateral phantom — #271 — cannot
|
||||
come back) and one sector fan per pair of angularly adjacent rays
|
||||
(`junctionNodeGeometry`): mitre up to the node limit, bevel chord past it,
|
||||
reflex sectors skipped. The pieces are clipped by the plain-corner facade
|
||||
bound (`junctionNodeBound`), so a node can never grow new facade at a concave
|
||||
vertex. The result is strip-safe: an acute junction is solid masonry, and the
|
||||
objective invariant «body ⊇ support strips ∪ fans, inside the facade bound» is
|
||||
machine-checked by `junctionContractHoles` in tests and the
|
||||
**Junction nodes (#302, owner decision #5).** A degree-3+ node closes with a
|
||||
FULL mitre, like an ordinary wall intersection on a drawing — the #249 chamfer
|
||||
is retired. For every pair of angularly adjacent rays `junctionNodeGeometry`
|
||||
builds one additive fan: the mitre is accepted when it sits IN the sector
|
||||
(forward along the rays for an ordinary pair, backward for a reflex outer
|
||||
corner), within the classic `MITRE_LIMIT` and never past a ray's thick
|
||||
support (#271); a reflex pair without a valid mitre closes with the plain
|
||||
chord, an ordinary one with a local bevel bounded by the support, the limit
|
||||
and twice the pair's depth. The node also gets the exact support quads of its
|
||||
rays. All pieces are clipped by the plain-corner facade bound
|
||||
(`junctionNodeBound`), so a node cannot grow new facade at a concave vertex.
|
||||
`bevelMultiWallBody` survives only as a TARGETED lateral trim for nodes with a
|
||||
degenerately short thick support (#271); every other node is purely additive.
|
||||
The objective invariant «body ⊇ support strips ∪ fans, inside the facade
|
||||
bound» is machine-checked by `junctionContractHoles` in tests and the
|
||||
`smoke_junction_holes` wiring probe. Degenerate zero-area rings left by
|
||||
coincident chords are dropped.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user