Two behaviour improvements to arch suggest (suggestTopology), requested by the downstream
ArchCanvas product, which persists a chosen candidate's insertText back into .arch source. Both
are unconditional — per ADR 0005 suggestions
are deterministic data, and the new behaviour is strictly more correct, so there is no opt-in flag.
The public Suggestion / SuggestionCandidate types are unchanged; only the string a candidate
carries (and, for one fault, candidate order) changes.
Changed
- Candidates reference walls only by a STABLE ref. A candidate's
insertTextused to be able to
name a wall by its positional auto-id (e.g.door on partition_3 at 50%), which re-indexes
silently when a later edit inserts an earlier same-category wall — corrupting any persisted
suggestion. Each candidate now composes its placement as the first available of: an author-declared
wall id (on <id>), a unique wall category (on <category>, valid iff exactly one wall carries
it), or absolute coordinates (at (x, y), which name no wall — the compiler's nearest-wall
hosting binds the intended one). A positional auto-id is never emitted. Applies to all four
builders (entrance, unreachable-room, bedroom-window, bath-via-bedroom). - A private unreachable room prefers reconnecting inward. For
W_ROOM_UNREACHABLEon a private
room (bedroom or wet room), interior candidates that reconnect to a space already reaching the
entrance now rank above exterior (new-outside-door) candidates, regardless of run length; within
each group the existing longest-free-run order is kept. Non-private rooms keep the pure geometric
order.W_NO_ENTRANCE(exterior-first by design),W_BATH_VIA_BEDROOM(already interior-preferred),
andW_BEDROOM_NO_WINDOW(windows are exterior-only) are unchanged.
Internal
RWallcarries an internal_idAuthoredmarker (set inresolvefromassignIds' knowledge of
whether the id was author-declared;_-prefixed, never serialized into the Scene/exports), so
suggestTopologycan tell an authored id from an assigned positional one.