Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d9d3fb4
Use wall face mitering for draft angle arcs
sudhir9297 May 14, 2026
629e05b
Add draft angle arcs for walls and fences
sudhir9297 May 14, 2026
20b3a3c
Render curved wall measurements along the wall
sudhir9297 May 14, 2026
de34a07
feat: add camera-aware wall move handles and UI layer for floorplan e…
sudhir9297 May 14, 2026
5c55f25
refactor: make onMove optional in FloorplanActionMenuEntry and remove…
sudhir9297 May 14, 2026
2eb5db1
feat: add fence move handles and duplication functionality to the flo…
sudhir9297 May 14, 2026
04a0c8a
fix: increase stair opening buffer constraints and set default offset…
sudhir9297 May 14, 2026
dd44a8e
Clamp spiral stair openings at full sweep
sudhir9297 May 14, 2026
57ee161
Fix floorplan labels and door/fence geometry
sudhir9297 May 14, 2026
6a9a65f
Organize door panel controls by door family
sudhir9297 May 14, 2026
7b5eba2
Refine window panel by family
sudhir9297 May 14, 2026
1bb0d14
Render detailed window types in floorplan panel
sudhir9297 May 14, 2026
b7c6ba4
Enhance elevator placement preview
sudhir9297 May 14, 2026
ea819bc
Remove material strips from roof, stair, and fence panels
sudhir9297 May 14, 2026
303b0c9
Refine wall chaining and door arch clipping
sudhir9297 May 15, 2026
4778986
Make fence drawing continue between segments
sudhir9297 May 15, 2026
eccce44
Scope first-person overlay and unify elevator colors
sudhir9297 May 15, 2026
51857cc
Preserve elevator stop order and handle viewport resize
sudhir9297 May 15, 2026
79d9d68
Refactor material catalog for roofing and flooring
sudhir9297 May 15, 2026
e726e41
feat: expand material library with new wood and flooring textures whi…
sudhir9297 May 15, 2026
50fe327
feat: implement StairOpeningSystem to handle automated stair opening …
sudhir9297 May 15, 2026
e080934
style: apply biome lint and format fixes
sudhir9297 May 15, 2026
4522643
Constrain wall moves along wall normals
sudhir9297 May 15, 2026
3cda33e
Reduce wall rebuilds during window and door placement
sudhir9297 May 16, 2026
6b376f0
open-PR Skill update
sudhir9297 May 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
89 changes: 70 additions & 19 deletions .agents/skills/open-pr/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
name: open-pr
description: Open a pull request on pascalorg/editor using the repo's PR template. Use when the user asks to open/create a PR, push and PR, or ship a branch in the editor repo.
description: Open or update a pull request on pascalorg/editor using the repo's PR template. Use when the user asks to open/create a PR, push and PR, ship a branch, or refresh a PR description after new commits in the editor repo.
allowed-tools: Bash(git *) Bash(gh *) Read
---

Open a pull request against `pascalorg/editor` from the current branch.
Open a pull request against `pascalorg/editor` from the current branch, or — if a PR for the branch already exists — push new work and reconcile the PR description against the current `main..HEAD` delta.

## 1. Pre-flight

Expand All @@ -16,8 +16,13 @@ git log --oneline main..HEAD

Stop if:
- The current branch is `main`. Ask the user to create a feature branch first.
- The branch has no commits ahead of `main`. Nothing to open a PR for.
- There are uncommitted changes the user hasn't asked to commit.
- The branch has no commits ahead of `main` **and** no uncommitted changes. Nothing to ship.

If there are **uncommitted changes**, do not silently skip them:

1. Show the user `git status` and `git diff --stat`.
2. Ask for a commit message (do not auto-generate — this is an explicit "ship it" moment).
3. Stage the intended files and create the commit with the user-provided message.

Run a build sanity check if the change is non-trivial:

Expand All @@ -26,36 +31,50 @@ bun typecheck
bun build
```

Don't open the PR with a broken build.
Don't open or update the PR with a broken build.

## 2. Read the PR template

The template is at `.github/pull_request_template.md`. Read it before composing the body — the section headings and checklist items are the source of truth, not your memory of them.
The template is at `.github/pull_request_template.md`. Read it before composing or reconciling the body — the section headings and checklist items are the source of truth, not your memory of them.

```bash
cat .github/pull_request_template.md
```

Mirror the template exactly:
Template sections (mirror exactly):

- `## What does this PR do?` — one paragraph or a short bullet list. Link related issues with `Fixes #123` when applicable.
- `## How to test` — numbered, concrete reviewer steps (commands to run, what to click, expected outcome).
- `## Screenshots / screen recording` — if the change is visual, paste a recording link or note that one will be added. If purely non-visual (refactor, internal API), say so explicitly so the reviewer knows nothing is missing.
- `## Checklist` — copy the boxes verbatim, ticking the ones already verified.
- `## What does this PR do?` — one paragraph or short bullet list. Link related issues with `Fixes #123`.
- `## How to test` — numbered, concrete reviewer steps.
- `## Screenshots / screen recording` — link, or `N/A — non-visual change` if it doesn't apply.
- `## Checklist` — the boxes from the template, verbatim.

## 3. Push and open
## 3. Push

```bash
git push -u origin HEAD
```

Check for an existing PR first:
This updates an existing PR's commits/files automatically if one is already open. The description, however, does **not** auto-update — that's what step 5 handles.

## 4. Detect existing PR

```bash
gh pr view --json url,number,title,body 2>/dev/null
```

- If the command returns nothing → no PR exists → go to **step 5a (create)**.
- If it returns a PR → capture `url`, `number`, `title`, `body` → go to **step 5b (reconcile)**.

## 5a. Create (no existing PR)

Compose the body from the current `main..HEAD` delta:

```bash
gh pr view --json url 2>/dev/null
git log --oneline main..HEAD
git diff --stat main...HEAD
```

If none exists, create it. Pass the body via HEREDOC to preserve markdown formatting:
Fill the template sections based on that delta. Then:

```bash
gh pr create --title "short, scope-prefixed title" --body "$(cat <<'EOF'
Expand Down Expand Up @@ -85,13 +104,45 @@ EOF

Keep the title under ~70 characters. Use a scope prefix when there's an obvious one (`viewer:`, `core:`, `editor:`, `mcp:`).

If a PR already exists, print its URL and stop — don't recreate.
## 5b. Reconcile (existing PR)

**Goal:** keep what's still accurate in the existing description (including any manual edits the user made in the GitHub UI), update what's now wrong, and add what's missing. Do **not** blindly overwrite.

Steps:

1. Re-read the existing body captured in step 4.
2. Compute the current delta:
```bash
git log --oneline main..HEAD
git diff --stat main...HEAD
git diff main...HEAD
```
3. Section by section, produce a reconciled body:
- **What does this PR do?** — Keep existing sentences/bullets that still describe the branch. Rewrite or remove ones that no longer match the diff. Add bullets for new commits/features not yet mentioned.
- **How to test** — Keep existing steps that still work. Update commands/paths that have changed. Add steps for new behavior. Remove steps for behavior that was reverted or removed.
- **Screenshots / screen recording** — Preserve existing links verbatim. If the change is now visual and no link exists, note `<link to be added>` rather than removing the section.
- **Checklist** — **Preserve the user's checkbox states exactly** (ticked or unticked). Do not re-tick based on this run's verification. If a box is unchecked but you verified its condition (e.g. `bun check` passed), surface a *note in the final report* — do not modify the box.
4. Preserve the template's section order and headings.
5. Write the reconciled body back:

```bash
gh pr edit --body "$(cat <<'EOF'
<reconciled body>
EOF
)"
```

Update `--title` too **only if** the scope clearly changed (e.g. branch started as `editor:` work but now also touches `core:`). Otherwise leave the title alone.

If a reconcile would produce a body identical to the existing one, skip `gh pr edit` and note "description already up to date" in the report.

## 4. Report
## 6. Report

Return:

- PR URL
- Title used
- Whether the PR was **created** or **updated** (and if updated, whether the description was changed or already up to date)
- Title used (and whether it was changed)
- Commits pushed this run (from `git log`)
- Local typecheck/build status (if you ran them)
- A note for the reviewer if anything in the checklist is left unchecked
- Notes for the reviewer about any unchecked checklist items whose conditions you verified this run
Binary file added apps/editor/public/icons/elevator.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 0 additions & 10 deletions apps/editor/public/icons/elevator.svg

This file was deleted.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file not shown.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed apps/editor/public/material/wood2/albedoMap_Wood.jpg
Diff not rendered.
Binary file removed apps/editor/public/material/wood2/aoMap_Wood.jpg
Diff not rendered.
Binary file removed apps/editor/public/material/wood2/normalMap_Wood.jpg
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Diff not rendered.
Binary file removed apps/editor/public/material/wood5/aoMap_3_ao.jpg
Diff not rendered.
Diff not rendered.
Diff not rendered.
7 changes: 4 additions & 3 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ export {
} from './lib/door-operation'
export { getRenderableSlabPolygon } from './lib/slab-polygon'
export {
type AutoSlabSyncPlan,
detectSpacesForLevel,
initSpaceDetectionSync,
planAutoSlabsForLevel,
type AutoSlabSyncPlan,
type Space,
wallTouchesOthers,
} from './lib/space-detection'
Expand Down Expand Up @@ -89,6 +89,7 @@ export { default as useLiveTransforms, type LiveTransform } from './store/use-li
export { clearSceneHistory, default as useScene } from './store/use-scene'
export { resolveElevatorDispatchTarget } from './systems/elevator/elevator-dispatch'
export {
type ElevatorDoorSide,
getElevatorCabCenterZ,
getElevatorCabDepth,
getElevatorCabWidth,
Expand All @@ -101,7 +102,6 @@ export {
getResolvedElevatorDoorPanelStyle,
getResolvedElevatorDoorStyle,
getResolvedElevatorShaftStyle,
type ElevatorDoorSide,
} from './systems/elevator/elevator-geometry'
export { syncAutoElevatorOpenings } from './systems/elevator/elevator-opening-sync'
export { ElevatorOpeningSystem } from './systems/elevator/elevator-opening-system'
Expand All @@ -125,6 +125,7 @@ export {
resolveElevatorServiceLevels,
} from './systems/elevator/elevator-service'
export { syncAutoStairOpenings } from './systems/stair/stair-opening-sync'
export { StairOpeningSystem } from './systems/stair/stair-opening-system'
export {
getClampedWallCurveOffset,
getMaxWallCurveOffset,
Expand Down Expand Up @@ -157,8 +158,8 @@ export {
constrainWallMoveDeltaToAxis,
getPerpendicularWallMoveAxis,
planWallMoveJunctions,
type WallMoveBridgePlan,
type WallMoveAxis,
type WallMoveBridgePlan,
type WallMoveJunctionPlan,
type WallPlanPoint,
} from './systems/wall/wall-move'
Expand Down
Loading
Loading