Repository navigation
Fix mirrored 3D plot meshes - #57
Closed
shanedertrain wants to merge 501 commits into
Closed
shanedertrain wants to merge 501 commits into
shanedertrain wants to merge 501 commits into
Conversation
…nts the link is back
…urn fold hid the agent's messages between tool runs Co-Authored-By: Claude <noreply@anthropic.com>
Messages never fold: only tool-call runs collapse; the "Worked for" turn fold hid the agent's messages between tool runs
…s machine, the tabs it has, viewer and edits only here); rows act by BU.act; the reported-only bot is the bot view with its chat (window, web)
…edit (BU.head); a mirrored copy is dropped when its own hub is paired too (Hubs.bot.dup); apps tap by act, show the title
…e), a phone's mirrored copy dropped; machines_test follows the no-switch rule
… /bots/<link>~<id>/space.html)
…itor or workflow still running shows Monitoring, not Complete Claude's task_started lines for local_bash, local_workflow, remote_agent and monitor tasks now join the thread's bg list (not a subagent's own, not a foreground shell), and a task_updated that moves a shell to the background past its timeout adds it too.
…-shells Threads monitor background shells: a turn that ends with a shell, monitor or workflow still running shows Monitoring, not Complete
…and its steps; a subagent's own lines go to its log, not the timeline; sidebar rows say N agents
…isibility Subagents in view: a live panel in every client, their steps off the timeline, N agents in the sidebar
# Conflicts: # src/app/bots.bend
…tching; desktop notifications on the desk used last
The window and the web page say which thread they show and whether they have
the focus (desk.look, core/desk.bend). A thread a focused desk shows, used in
the last 3 minutes, raises no APNs push and no phone alert (info "desk"); any
other alert also goes to the desk used last as {"t":"notify"}: the browser's
Notification API (macOS, Windows, Linux) or notify-send in the Linux window;
a click opens the thread. Laws desk_*, alert_watched_quiet; test/desk_test.bend,
test/tools/desk_e2e.ts.
Co-Authored-By: Claude <noreply@anthropic.com>
Share ordinary projects and threads through the far projection, label their machine and availability on every client, and deduplicate paired-owner phone catalogs and folded counts. Preserve far drafts and forward the owning hub actual RPC reply. Track remote history epochs, replace only the affected projection on reset, serialize mirror persistence, and prevent late startup disk loads from replacing live traffic. Add 19 laws and projection, phone, routing and recovery coverage.
…tifications-setup Desks: hold phone alerts for a thread you're watching; desktop notifications
A directory-only bot choice gains its mirrored thread when available, without replacing an unfinished composer; native keyboard focus follows. Add four laws for selection preservation, adoption and focus. Offer the current history head on newly discovered ownership and establish the epoch before publishing pushes. Extend two-hub coverage to lower-sequence history replacement and delayed old pushes, and read created ordinary thread IDs from events.
…c is a step to walk, play and compare
…rrow pane overlapped them)
…clears only an older stream, a late delta never shows, a newer one that came first stays), bounded snapshots, truncated buffers go whole, far turn ends alert without touching another hub's Live Activity, a tapped far alert opens on the hub that holds it, island keyed by the owner's id, previews read only when sent
…view's root), checked against this hub's farfs
…umber of accounts Connect Google / Add account on iOS and Android opens a listener on a loopback port of the app's own (RFC 8252 7.3) and asks the hub to begin with that redirect (connect@<port>); the app opens Google's page (ASWebAuthenticationSession on iOS, the browser on Android), catches the redirect, returns to the app through backplane://google and hands the address to the hub (done:<address>), which trades the code with the redirect it began with. The hub takes only http://127.0.0.1:<port>/oauth/google (Google.loopback, laws google_loopback_*); e2e in google_e2e.ts.
…nd retried sends stop when sync goes off, a too-big live request is not taken for an idle peer, a history reset drops its live text, models are never deleted by another client's list, snapshots 16K, multiline /give, phones open a far file only once its cache is known
…in-multi-account Phones: Google sign-in from the app, any number of accounts
…s own repository and never a hidden file, cache rounds ordered by a ticket taken as their list arrives (a restored older file is installed, a stale round installs nothing), a failed round waits before the next, copy paths never prefixed twice (child sheets), a comparison's working copy read from the copy; bots_test schema text
…backplane P2P Backplane: create, drive, stream and view threads across all machines and clients
…und for it (or BACKPLANE_URL), never the 0.0.0.0 it listens on
Pairing off the tailnet: name a reachable address, not 0.0.0.0
Long threads: open, scroll and load fast on web, phones and window; todos and subagents fold and scroll
src/core/layers.bend (pure): a board's layers in KiCad's order (copper front to back, pads, vias, holes, the technical layers in front/back pairs, the user layers, edge and margin, courtyards, fab) with KiCad 7+ names; the focus (an active layer and how the others show: as they are, dimmed to a quarter, hidden), what stays with the active layer (the outline, and a copper layer's pads, vias and holes), the masks the web and phones draw from, a click on a layer's name (it stands out; again, all back), the All/Dim/Only switch, ctrl+H's cycle, and the window's kind word carrying the focus. Laws lyr_*; test/layers_test.bend. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…/Only Each row is the layer's colour (a click shows or hides it) and its name (a click makes it the active layer and dims the rest; again, all back). Over a board's rows, All, Dim and Only say how the others show, and the menu's button names the active layer. The canvas gets the hidden and dimmed layers as bits and the layer plot2d.js draws last, on top (client.bend's Lfocus, actions view-layer-pick and view-layer-mode). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n KiCad The Layers list follows KiCad's order and names; a row's colour shows or hides it (vw-layer), its name makes it the active layer (vw-layer-pick), and a board's list starts with All/Dim/Only (vw-layer-mode). ctrl+H cycles them as KiCad's high contrast does. The focus rides in the viewer's kind word into V.Look.on (Lyr.shade) and picking, and Ops.scene draws the active layer after the rest. Reset layers clears the focus too. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The phone's layer list follows KiCad's order and names and marks the active layer; screen fields dim, lift, layerMode, layerModes and layerHead, and off now holds the layers the focus hides too (a tap does not pick them). Android: a row's box shows or hides the layer, its name singles it out, chips for All/Dim/Only; the GL renderer draws dimmed layers at a quarter and the active one last. iOS: the same in its menu (a segmented picker, each row's show/hide and stand-out buttons) and Metal renderer (not built here). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Look.on read the focus from the kind word, so look_flip_none (with no flips Look.on is the kind's own look, for every kind) no longer held for a kind carrying a focus, and the proof failed in CI. Look.on and Look.of are back as they were; Look.at is Look.on under the focus, and the scene (Look.alpha, so Look.shows and the ops' gate and picking) and an item's colour go through it. A kind with no focus looks as Look.on says. bend PROOF.bend: All terms check. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Board layers: KiCad's order, single out a layer, All/Dim/Only (all clients)
Snaiderbg
pushed a commit
to Snaiderbg/Backplane
that referenced
this pull request
Oct 9, 2026
…-append Dictation goes in at the caret and reads on; dev installs ship the fast voice helper
This was referenced Nov 2, 2026
Closed
Collaborator
|
Superseded by the current orientation fix and the asymmetric mirrored-board regressions restored in #686: the present viewer coordinate pipeline already preserves handedness, so applying this old conversion would double-convert it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix mirrored 3D plot meshes
The web and phone 3D viewers show reflected geometry compared with KiCad because the shared mesh encoder swaps glTF Y and Z without preserving handedness. Rotate Y-up coordinates to Z-up as (x, -z, y), preserving asymmetric landmark positions and triangle winding. Apply the same conversion to mesh bounds.
Add regression coverage that decodes the encoded mesh and checks asymmetric positions, upward-facing winding, rotated bounds, and signed underside coordinates. Update the existing serialized mesh expectation.
Validation:
This PR contains only the mesh conversion and its regression tests.
Fixes #45