Repository navigation
editor: integrate local plugins, surface stairs and deck railings - #1001
sudhir9297 wants to merge 32 commits into
Conversation
What this PR doesThis wires five Pascal cluster plugins (Bath Space, Landscape, Pool, Streetscape, WebXR) into the standalone editor and adds two building features on top of the core/editor packages: straight stairs that attach to registered top surfaces, and fences drawn as deck railings that snap inside a deck's perimeter and track the active floor. Supporting work in core covers support references (remapping on clone, clearing on host delete), port connectivity, and a new stair-surface snap service with tests. The author marks this a local development draft: the five plugin dependencies in Changed files
Where to startStart with |
3761c31 to
94c1dad
Compare
25f199d to
1c453b0
Compare
Architectural Review: PR #1001Thank you for the ambitious contribution connecting deck railings, landscape snapping, and stair surface workflows! While the surface attachment mechanics and landscape transition math are valuable additions, this pull request introduces critical architectural boundary regressions, violates our unified modifier and snapping invariants, and breaks CI compilation for the host editor. Review SummaryVerdict: REQUEST_CHANGES
FindingsBlocker 1: Broken Typecheck and CI from External Git Packages
Blocker 2: Legacy File Location & Registry Dispatch Regression
Blocker 3: Alt-Key Misused as Snap and Alignment Bypass in Fence Drafting
Blocker 4: Alt-Key Misused as Snap/Alignment Bypass in Stair Floorplan Move & 3D Placement
Suggestion 1: Schema Redundancy —
|
61f3148 to
a64250f
Compare
6dc22d9 to
a1a1f81
Compare
e5d9d94 to
4865e43
Compare
14b99f1 to
b8f7aaf
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Streetscape stays @pascal-app/plugin-streetscape (pascal:streetscape), now pinned to wass08/streetscape-pascal-plugin@c4c012e, which brings in the streetscape-lab changes under its own name. Scenes that installed pascal:streetscape keep loading its nodes; the -lab id disabled them. - A stair on a level is lifted onto its slabs by the stair system again (pascalorg#216); only under another parent (a deck) does the renderer bind its Y. - The 2D move overlay has no stair branches: the stair's own move target reads the stair as the scene holds it, and already clears its surface. - A fence's surface host lasts one drawing session on its floor: leaving the tool or the floor drops it instead of closing the fence tool, so a later fence is plain and the tool works on every floor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Pushed two commits on top of this branch:
Biome, skills validation, the build, check-types, all package tests and the packed-CLI smoke test pass locally. Still open for you. These touch the API your external plugins rely on, so I left them:
🤖 Generated with Claude Code |
The plugin moves from a personal fork to the org, at the same code as before (the streetscape-lab changes under pascal:streetscape) with its links pointing at the org repo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@sudhir9297 Follow-up to my last comment: Streetscape now lives in the org, at https://github.com/pascalorg/plugin-streetscape.
Before this merges, please also repin bath-space and landscape from the PR-specific 🤖 Generated with Claude Code |
CI merges main with @types/three 0.186, where ReturnType<typeof texture> erases the RGBA type through a generic overload. Publish and pin explicit TextureNode<vec4> declarations in Pool and Landscape.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 046f962. Configure here.
| nodeRegistry.get(surface.type)?.capabilities?.surfaces?.top | ||
| ) { | ||
| return { ...fence, supportSlabId: undefined } | ||
| } |
There was a problem hiding this comment.
Rejected fence hosts stay persisted
Medium Severity
resolveFenceConstructionSupport rejects a requested host on another level, then falls through to slab election while still spreading the original supportSurfaceNodeId. A fence that already carries that rejected id keeps it, so railing elevation can keep sampling a host on the wrong floor.
Reviewed by Cursor Bugbot for commit 046f962. Configure here.


What does this PR do?
Includes the maintainer fixes for Streetscape identity, stair elevation and fence drawing sessions, retaining the project dashboard and navbar.
70cffa9a6878122acf6e3fdbde5725db4908f737: shared mounting cards and attached style panels in Guided and Catalog, sharp top pointers, responsive style grids, and one active category/style at a time. Clicking a category selects its first style; switching categories clears the previous selection.Removed the local Bath Space symlink and bundler override. The installed package now comes from the published subtree commit above. Frozen installation, editor lint and all 13 workspace typecheck tasks passed after this cleanup. The installed package source matches the local Bath Space source.
How to test
bun install --frozen-lockfilein a clean checkout. No sibling plugin checkout is required.wall-point:<node-id>slot ID, and save echoes should preserve tools and selection.Current review-fix verification:
bun install --frozen-lockfile --dry-run,bun run check,bun run skills:validate, and all 13 workspace typecheck tasks passed.PASCAL_PORTABLE_BUILD=1 bun run cinow passes end to end: check, skills validation, all 13 typecheck tasks, all 15 test tasks and all 9 build tasks. The CLI passes 107 tests, including activation, rollback and stopped-editor updates. A published-layout regression test reproduces the pin override on the previous code and passes with the fix.Review follow-up
@pascal-app/editor/distribution; builtin consumers and the published Landscape plugin use that entry. External plugins no longer need@pascal-app/nodesfor these tools.destinationSurfaceId/autoSurfaceSnap, with migration of the former fields. Curved transitions read the registered boundary rather than Landscape's private shape. Surface-parented snapping uses a common level frame. Raised-source previews and Landscape reparenting preserve the source elevation.sameStairMoveStillActive. The temporary fence alias migration was removed. PublicDEFAULT_STAIR_*exports are restored through core-owned constants.d60ee247334dad037e02a432a50bed9264193402on the stablepackages/landscapepublishing branch. Bath Space is now pinned to357338ddb7e042498fca7b6e6ee2054edbeb70b7, published onpackages/bath-space; its 370 tests and two thumbnail checks pass. Streetscape remains the maintainer's org pin.Quality check follow-up
bae442a04, which combines this branch with main's@types/three@0.186.0upgrade. The branch alone still uses 0.184.1 and did not expose the failure.TextureNode<'vec4'>declarations in Pool (1da7fb0d29691f3e2e488e24b436261266c692ceonmain) and Landscape (d60ee247334dad037e02a432a50bed9264193402onpackages/landscape). This preserves RGBA channels lost byReturnType<typeof texture>under the new generic overload. Shader calculations are unchanged.bun run cion the CI merge: 13 typecheck tasks, 15 test tasks and 9 build tasks. Forced branch typechecks also pass. Pool's 19 shader tests and 13 targeted pond behavior tests pass.Screenshots / screen recording
Not added yet.
Checklist
bun devbun checkto verify)mainbranchNote
Medium Risk
Touches collaborative autosave/SSE, scene validation, and broad placement/topology logic (stairs, fences, clones); plugin pins and runtime size affect releases but not auth.
Overview
Integrates Bath Space, Landscape, Pool, Streetscape, and WebXR into the editor app via dynamic plugin discovery, Tailwind
@sourceentries, updated GitHub pins, and Turbopack/transpile wiring; adds a lazy Pool section banner on the viewer and documents E-017 optionalNodeDefinitioncapabilities (surface boundaries, connected move, primary inspector, independent child frames,metadata.roomBoundaryopt-out).Core/editor behavior expands plugin-friendly authoring: straight stairs gain
destinationSurfaceId/autoSurfaceSnapand magnetic snapping against registered top-surface boundaries; fences validate explicit top-surface hosts on the same level; connected-move and preserve-level-and-elevation hooks extend port connectivity and the generic move tool; clones/deletes remap or stripsupportSurfaceNodeId/destinationSurfaceId. Room topology ignores walls withroomBoundary: false. Shared distribution run tooling is exported from@pascal-app/editor/distribution.Collaboration and API: live scene SSE skips in-flight autosave echoes (pending graph signatures) so tools/selection are not reset; the graph API accepts
wall-point:<id>slot IDs while still rejecting dangerous URL schemes. CLI runtime staging reports static media sizes, raises the packed-archive budget to 140 MiB, and smoke-checks offline catalog WebP/GLB over HTTP; explicit runtime activation boots the chosen version despite CLI pins.UX polish: global thin scrollbars, default sidebar 360px, contextual help “More shortcuts” collapse, and fence draft Alt angle lock.
Reviewed by Cursor Bugbot for commit 16091ac. Bugbot is set up for automated code reviews on this repo. Configure here.