Skip to content

feat: scale-true drill-down — the section never rescales - #9

Draft
bryan-uipath wants to merge 2 commits into
feat/pr-provenancefrom
feat/scale-true-drill
Draft

bryan-uipath wants to merge 2 commits into
feat/pr-provenancefrom
feat/scale-true-drill

Conversation

@bryan-uipath

Copy link
Copy Markdown
Owner

Stacked on #8.

Drilling in used to re-map the subtree to the full 900-unit stage, so footprints inflated while heights stayed absolute: a district read as a pancake, and the homing transition had to scale it up around the anchor. Now each node keeps the rect/depth/tier it was first laid out at (VNode.home) and a drilled-in scope is laid out at that home. Everything lands where it already stood; only the surroundings go away and the camera closes in.

  • layoutCity(root, { at }) places the root at a given rect/depth/tier; layoutNode records first placement.
  • scopeHome() resolves the home of the (possibly synthetic) scope root; stageFloor() is the only exception — scopes too small to place their children are enlarged about their centre (real folders max(48, √files·6), file/module scopes keep the old max(60, √buildings·55)).
  • Transition k is now 1 in the common case; the old city fading over the identical new one is invisible.

Before / after isolating packages/canvas/.../hooks (58 files): the old version stretched it to a flat plate; the new one keeps its towers.

Known trade-offs (recorded in DESIGN.md "Scale-true drill-down"):

  • Files too small for a plate at true scale stay unplaced inside their isolated folder (55 of 58 placed in the example above); search still drills to them.
  • Tall towers can overrun the top of the framing, which fits the footprint only.
  • The file/module floor still grows a file plate several ×; that goes away with the file-interior redesign (next PR).

Verification: npm run typecheck; motion probe passes (0% viewport jump on every rebuild frame, skyline cleared, no polar backtrack).

🤖 Generated with Claude Code

bryan-uipath and others added 2 commits September 7, 2026 13:08
Each node keeps the rect/depth/tier it was first laid out at (VNode.home);
a drilled-in scope is laid out there instead of re-mapped to the full
stage, so heights, footprints and terrace altitude read the same at every
level and the homing transition has nothing to scale. A legibility floor
enlarges only scopes too small to place their children.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A drilled scope whose root was never laid out (a module made on the spot by a
double-click, a file stripped for being too small) fell back to the whole
CITY_SIZE rect — a 900-unit pancake. It now lands on a floor-sized square at its
nearest placed ancestor. The legibility floor measures the home's short side, so
a skinny plot is widened too, and label culling is relative to the stage instead
of a fixed 3 units. Folders too deep for a terrace sign no longer count as
signed, so they keep their label pill.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant