← Files Planner5D: Plan, Build, CreateARCHIVED FILE

skills/planner5d-floorplan-recheck/SKILL.md

8.8 KB · Oct 10, 2026 · 18:24 UTC

↓ Download file

See the change to this file →

---
name: planner5d-floorplan-recheck
description: Recognize, recreate or audit Planner5D floor plans from plan drawings/images, PDF/CAD, or measured scan geometry. Compare source dimensions, rooms, walls and openings, then make native corrections while preserving valid work. Use for recognition quality and measured source-plan fidelity, not ordinary interior/facade photographs without a plan.
metadata:
  version: "0.1.9"
---

# Planner5D floorplan recheck

For a Planner 5D MCP App, use the server relay described in `planner5d-native-app` and invoke native `goToEditorProject` through `change_planner5d` to open the verified target. Read the live editor context after navigation. The ordinary browser route and the app route use the same native operations and measurement contracts.

For an already-recognized project, start with comparison; do not upload the source again. Honor read-only/manual-construction requests. Read [recognition and recovery](references/recognition.md) only for submission/recovery, and [geometry correction](references/geometry-correction.md) only for a measured geometry defect.

**Removal gate:** do not call `remove` unless actual `selected` is nonempty and matches the intended source-absent IDs exactly. A wanted window/door in that set means stop before removal. `editorClearSelection` clears focus; it does **not** ungroup objects. Never replace a wanted original opening with a catalog substitute to repair this mistake.

## Establish source and target

Inspect the source. Record page/floor, scale, labeled lengths and their **basis** (inner span, wall path, exterior span, opening width), room functions, access and openings. Keep measurements, visual estimates and defaults distinct. Identify plan pages/floor order in multipage PDFs; do not silently omit floors. Missing scale blocks exact length claims, not useful topology review.

Use all assigned sources and the user's requested contents: an item omitted from one plan view may be supported by another photo or by the furnishing brief. `Ns` can also be a roof, stair or other architectural catalog component. Do not delete every `Ns` merely because the plan drawing is unfurnished.

Set tolerance from user requirements and source precision; a label rounded to 0.1 m is not centimeter-exact. Keep a compact ledger: source reference, expected value/basis, object IDs, observed value/method/basis, units and tolerance. Use the [ledger reference and optional arithmetic helper](references/measurement-ledger.md) for complex comparisons; do not reread an already-loaded entrypoint.

Start with `editorGetContext({})`: bind the project hash, floor, permissions and revision. Omit `includeCamera` in 2D. Read `getWebMcpGuide` once; request help only for unfamiliar registered tools, at most eight names per call. Follow live schemas, without guessed tools or private-state fallbacks.

## Measure before diagnosing

1. List the complete scoped inventory with `editorListObjects` (up to 100 per page). `Room`, `Wall` and `Point` are structure; `Door` and `Window` are openings; `Ns` denotes catalog models such as furniture or curtains, and `Pr` denotes primitives. Inspect and classify every `Ns`/`Pr` against the source before claiming no additions. Empty names or unloaded bounds do not mean absent objects. Batch related IDs in `editorInspectObjects`, `fields:["geometry","properties"]` (up to 50 IDs). Retain original opening IDs, catalogs, positions, dimensions and attachments. Read `data` only for missing required fields.
2. Read wall properties whose `property` is `length`, including their returned `units`, paired with wall paths. **`editorGetSceneMeasurements` supplies flooring areas/counts, not room width/depth.** Repeating it cannot supply a missing length. Context/outline bounds are path evidence.
3. Confirm the length's basis from native geometry and flooring area, with 2D dimensions when available; do not label `length` as a path measurement merely because it belongs to a wall. For a verified rectangle, cover both opposing side chains on each axis, summing contiguous collinear segments. Compare `widthCm × depthCm / 10000` with native `flooringArea`: agreement within measurement rounding, together with both opposing reported lengths being materially smaller than their measured paths (beyond native rounding), corroborates the inline/usable basis. Record this method; 2D labels are additional evidence, not mandatory when the cross-check is decisive. Missing labels alone do not mean the returned length is a path measurement or require repeated previews. Area alone or an irregular/clipped floor cannot establish width/depth. Do not require four wall records.
4. Compare matching bases/units only. Source inner spans versus path bounds means **insufficient measurement evidence**: inspect native wall measurements before judging size. Do not rescale or report a mismatch from an unresolved basis.

Check floor/room functions, shared boundaries, entrance-to-room connections and source-supported opening positions, widths, directions/heights. When repositioning an opening, `offsetCm` is its center's distance along the inspected wall path; centered means half that path length, not half its usable interior `length` or a near-edge gap. Preserve the opening ID and inspect the applied center and aperture ends. In default 2D, X grows right and Y downward; a 3D orbit does not redefine north/south. Room-owned walls at a shared boundary are not by themselves erroneous duplicates.

## Correct only demonstrated differences

When dimensions/topology match, preserve geometry; correct only wrong functions/names and unwanted additions. Set inspected editable keys with string values. Room titles use `customName` when exposed, not `name`. A native room-type label may already satisfy the source; skip redundant custom titles unless exact wording matters. One rejected key does not prove naming is unsupported.

Finish this sequence for one saved `targetId` before selecting another group. Reuse returned IDs verbatim; an invalid ID is not evidence that a different object disappeared.

1. `editorSelectObject(targetId)` → `editorGetSelectionActions()`. Compare returned `selected` with the intended removal IDs, not just the requested ID.
2. If a wanted companion is selected, call `editorRunSelectionAction({action:"ungroup"})` only when available, then **reselect that same `targetId`** and read selection/actions again. Checking another curtain/window group cannot establish whether this ungroup succeeded.
3. Call `editorRunSelectionAction({action:"remove"})` only after the removal gate passes. If ungrouping is unavailable or the selection still includes a wanted object, leave it intact and report the blocker.
4. Verify this target is gone and its original opening is intact, then advance to the next target. If a mistake required Undo, verify restoration and change the failed selection procedure before retrying. Clearing selection and repeating the same group removal is not a recovery.

Use current revisions, stable operation keys and terminal business results; preserve partial IDs. Reuse measurements after name/type/decor-only edits when geometry preservation agrees. Inspect affected objects after correction and perform one final scoped check. Avoid full-document/measurement/preview loops without a new discrepancy. For persistent errors, revise the diagnosis or report a blocker.

## Verify and deliver

Capture 2D/3D with `editorGetScenePreview({view:"2d",scope:{kind:"floor"},maxImageBytes:1000000})` and the corresponding 3D call. Default width is 768, maximum 1024. Inspect actual image blocks, not serialized base64. The preview switches view and waits for readiness; wait separately only for reported pending IDs, in the required view. Use a smaller relevant scope for unreadable details.

Run scoped `editorValidateScene`; retain inherited warnings when geometry otherwise matches. A clean structure result does not certify circulation, door swing, wall clearance or exact mesh contact. State checked and unresolved constraints. Finish the shell before cosmetics/furnishing.

Return the project link (using the native result URL or the connected Planner origin with the verified project hash), source-versus-actual measurements with basis/tolerance, corrections, inventory counts, preservation checks and blockers. Normal autosave suffices for routine edits; idle is not a server receipt. Reload for requested persistence tests. Test Undo/Redo when geometry/history recovery needs it, checking neighbors and attachments. Keep credentials and signed access tokens out of links/results.

For plan import followed by furnishing or an AI render, continue from this verified native project: use `planner5d-webmcp` for the requested room design, `planner5d-model-import` for specific real furniture, then `planner5d-ai-render` for the completed source scene. Return the requested final image and editable project; recognition alone does not finish that combined brief.

SHA-256: f13d8ee8222f2a0cef473bc7c2b6fce70522b56bbf12c40f627665d74791a49f