Repository navigation
editor: integrate local plugins, surface stairs and deck railings - #1001
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.
- E-017 carries the owner's sign-off, its enforcing tests and when to revisit it, on one line like the other decisions; shared authoring tools come from a host package rather than naming editor/distribution. - landscapeSurfaceId / autoLandscapeSnap never shipped on main, so no saved scene holds them: the load migration and its test go, as the fence supportSurfaceId shim did. - The nodes package description keeps its em dash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks @sudhir9297, this addresses almost everything. I pushed
Follow-up, not blocking this PR: moving the run-authoring code into 🤖 Generated with Claude Code |
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.
Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit bffa026. Configure here.
| slabOpeningMode: 'none' as const, | ||
| destinationSurfaceId: surfaceSnap.surfaceId, | ||
| railingMode: 'none' as const, | ||
| } |
There was a problem hiding this comment.
Surface snap clears stair railings
Medium Severity
Snapping a straight stair to a registered surface writes railingMode: 'none' on place and on 2D/3D move. That overwrites the stair tool default during placement and strips railings already authored on an existing flight.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit bffa026. Configure here.
#1001 moved @pascal-app/plugin-pool from 483a080 to 1da7fb0, which carries the same @types/three 0.186 texture typing fix upstream, so the patch applied to nothing and only made installs rewrite the lockfile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#1094) * distribution: the editor's run tool names no kind; duct and pipe specifics live in nodes The run-authoring tool moved to @pascal-app/editor/distribution so node packs can share it without importing the built-in plugin (E-001, E-017). It came with what only the built-in kinds mean: - The port systems (duct supply/return, DWV waste/vent, refrigerant) and the nominal-inch section size are the built-in kinds' conventions: they move to nodes/src/shared/port-systems.ts, where those kinds' tools import them. - The run-body queries required no kinds and fell back to 'duct-segment'; every caller now says which kinds it snaps to (the duct tool already meant ducts, and a node pack's runs no longer read as ducts by default). No behaviour changes; the public editor/distribution entry keeps every export a node pack uses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Drop the Pool patch for a commit no longer pinned #1001 moved @pascal-app/plugin-pool from 483a080 to 1da7fb0, which carries the same @types/three 0.186 texture typing fix upstream, so the patch applied to nothing and only made installs rewrite the lockfile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>


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 live scene sync, plugin/runtime provisioning, and broad authoring behavior (stairs, fences, moves, graph validation); changes are well-tested but affect persistence and multi-user editing flows.
Overview
This PR wires Bath Space, Landscape, Pool, Streetscape, and WebXR into the standalone editor via lazy plugin discovery, updated GitHub pins, Tailwind
@sourceentries, and turbopack/transpile aliases. Pool gets a lazy viewer banner; the portable runtime budget rises to 140 MiB with staging/smoke checks that verify bundled catalog WebP/GLB assets.Core/editor contracts (E-017): node packs can contribute surface boundaries,
connectedMove, primary inspector extensions, independent child move frames,preserveLevelAndElevation, andmetadata.roomBoundary === falseto opt out of room topology. Straight stairs gaindestinationSurfaceId/autoSurfaceSnapand sharedresolveStairSurfaceSnap; fences validate explicit walking-surface hosts on the same level. Clone/delete paths remap or strip surface-support references.Authoring UX: distribution run tooling is exported from
@pascal-app/editor/distribution; stair build previews include snapped length/step count; fence drafting respects Alt/angle lock; wall placement uses a shared pointer tracker; move tools avoid slab hopping when preserving elevation; contextual help collapses secondary shortcuts.Reliability: autosave tracks pending graph signatures so SSE echoes of the client’s own save do not reapply the graph and reset tools/selection. API graph validation allows
wall-point:<id>slot IDs while still rejecting dangerous URL schemes. CLI runtime activation/rollback boots the selected runtime instead of being overridden by the package pin.Reviewed by Cursor Bugbot for commit bffa026. Bugbot is set up for automated code reviews on this repo. Configure here.