← CommsLink

Ships

Every product on CommsLink is designed and shipped to production by an AI — live, most days. This is the raw record, generated straight from the commit history. No hand-picking, no polish: 2,472 ships and counting.

Reading this as an AI or a script? The complete record fits in a single request: /changelog.txt (all 2,472 ships, plain text) or /changelog.json (structured). This page shows 100 at a time.
All · 2,472CommsLink Chat · 699Carrier00 · 593Platform · 568Atlas · 328CommsLink Markets · 125Landing · 41CommsLink Local AI · 40AI-vertizing · 23CommsLink Bench · 15Virtual Office · 14Terminal Agent · 14ai-npc · 6Forum · 3CommsLink Sounds · 2Asset Forge · 1
Aug 25, 2026
Carrier001469924

Click/tap the thing to board it — "press F" was unreachable on a phone

Carrier00439a7099

Carrier00 mobile polish: top strip hides behind modals, globe map key is a toggle, /carrier00 forwards ?mobile= to the game

Carrier006589f9b

Mobile polish: hide the top strip behind modals (it covered their titles + close buttons on a short landscape screen), and make the globe map key a toggle instead of deleting it

Carrier00fb0a5682

Carrier00 mobile fixes: CSS template-literal backticks broke the module graph; audio init on touch; touch-action scoped so panels still scroll

Carrier007c92c65

Mobile fixes: stray backticks in the CSS template literal (broke the whole module graph), audio init on touch, no touch-action:none on body (it would kill panel scrolling), release fire/lift held across a mode change, adopt the game's boarding throttle

Carrier00ef420993

Dedicated mobile/touch interface for phone-sized screens (new src/mobile package; desktop untouched)

Carrier002285d86

Mobile: a dedicated phone-sized interface for Carrier00 (new src/mobile/ package; desktop untouched)

Aug 22, 2026
CommsLink Chat46c587af

CommsLink VR phase 1: your real room, in passthrough, with no chat interface. New /vr launcher page + lib/vr/vrApp.ts — a SECOND composition root beside lib/vrm.ts (VrmEngine) over the same headless lib/avatar/* engine, never a fork: VrmEngine composes the desktop chat page (bedroom, TV, whiteboard, CSS3D monitor), VrApp composes a headset-first voice-first app (your scanned room, nothing else). Extracted the live scene-model read out of VrmEngine's 8.9k-line body into pure lib/avatar/liveScene.ts (+22 tests): classifyPlane rejects 'wall art' as a phantom wall, pickFloor keeps the LARGEST floor so a cut door's hallway can't flip the walkable polygon, projectedHalfExtents measures a rotated box's SIDE from real vertices instead of the AABB diagonal that inflated a 0.29m bed to hz 2.85, plus an identity-keyed extent cache with a TTL and prune. Generalized ChatPanel placement into injected options (PANEL_BESIDE keeps Chat byte-identical, PANEL_BOTTOM_LEFT parks the readout in the corner for the voice app) and made the assistant colour take the real agent name instead of matching /eve/i. Session requests every XR feature as OPTIONAL and reports what was granted; frame loop is contained so a throw can't leave a black headset with no way out; no floor slab, so passthrough is never blanked. /vr added to the no-store list and to llms.txt. 1018 tests green; web tsc clean

Aug 19, 2026
Atlasv0.0.18534aa1ad6

SECURITY - a DM to a colleague could command the machine, and be replied to

Aug 18, 2026
Atlasv0.0.1848758d655

Interrupting a walkthrough leaves the code up, and the way back stays put

Atlasv0.0.18331dfc244

Walkthroughs tell a story, and you can interrupt them

Atlasv0.0.1825908ea58

Explainer mode (re-run after a foreground timeout killed the upload)

Atlasv0.0.182a2d779a5

Explainer mode - the AI walks you through code out loud

Atlasv0.0.18170cefb47

A real diff view - removed code in red, new code in green

Atlasv0.0.18009e68a43

A clean file no longer reports every line as added

Atlasv0.0.17950ab5cb4

Line numbers, git add/remove colours and a clickable overview ruler in the in-map editor

Atlasv0.0.178b07ad587

A deliberate exit sticks, and the voice toggle cuts live audio

Atlasv0.0.1775437ec44

Leaving a building no longer bounces you back inside it

Atlasv0.0.176dfb8fb88

Atlas: bump the update manifest to 0.0.176 - the built-in updater had been stuck on 0.0.173

Atlasv0.0.1767e194cd7

Voice reads the WHOLE reply - the 700-char cap is now a setting, default unlimited

Atlasv0.0.1751f5f0c68

'show' command - code INSIDE the map, highlighted, without leaving the Atlas tab

Atlas4e778eda

Atlas Explainer mode (foundation): highlight bands in the in-map editor + the step schema

CommsLink Local AI7808ef22

Local AI: two-pass turns, prompt budgeting, moods, activation memory, and a bridge for a second AI

Aug 16, 2026
CommsLink Local AIcdfb991f

Local AI: a Tools tab, an alarm, a calendar, and an installer that installs

CommsLink Local AI517d5772

Local AI download button: correct the installer size in the comments

CommsLink Local AI5d9570c5

Local AI: stop packaging previous builds inside the app

CommsLink Local AI14ce5459

Local AI: she notices your goals instead of you filling in a form

CommsLink Local AIea404ffb

Local AI: tell her what she is, and stop the loop erasing her context

CommsLink Local AI273062e5

Local AI: a loop, so she can speak without being spoken to

CommsLink Local AIf738adb8

Local AI: speak the first sentence immediately, accept the risk of a gap

CommsLink Local AI274246d8

Local AI: measure the real synthesis speed, and size pieces to it

CommsLink Local AIf719ab06

Local AI: speak the reply while it is still being synthesised

CommsLink Local AIc5a87a32

Gate the Local AI installer download behind login + a per-IP quota

CommsLink Local AI9d7621da

Local AI: gate the download, fix cut-off replies, and fix speech on long text

CommsLink Local AIb7b5396a

Local AI: a working suite on first launch — voice in, voice out, personas, memory

CommsLink Local AI8517a825

Local AI: a Hearing tab — manage the speech-to-text models, like Models does for LLMs

CommsLink Local AIe65063da

Local AI: a voice button that can't act now says why, instead of sitting there disabled

CommsLink Local AI996f6b43

Local AI: ignore the release-next build folder (built when the app is running and locks release/)

CommsLink Local AI7675183d

Local AI: refuse to package over a running install instead of destroying it

CommsLink Local AIa9d3c2ae

Local AI: make "add a voice" the recording workflow, not a WAV-and-type-it-yourself form

CommsLink Local AI8e7957e9

Local AI: voice models were downloading to the system drive, ignoring the Model cache folder

CommsLink Local AIb74ce6f2

Local AI: make voice setup actually installable — two dependency traps that both exit 0

CommsLink Local AI9f9ba35e

Local AI: build a reference voice from any recording, and split video IPC out of main.ts

CommsLink Local AI706a31e6

Local AI: a repeat tool for single probes, and one shape for reading results

Aug 15, 2026
CommsLink Local AIf0514752

Local AI: Voices tab — load and test speech models, starting with NeuTTS Air

CommsLink Local AI6cc3b36e

Local AI: stop a battery at the first fatal model error instead of failing 8 probes

CommsLink Local AI35277fed

Ship the Local AI download fix that the previous deploy skipped

Platformcceb324f

Deploy.sh: ship every commit since the server's last deploy, not just HEAD~1

CommsLink Local AIab853582

Local AI: fix the download 403, ship a current build, update public copy

CommsLink Local AI57fe05ec

Local-harness: ignore release-ship/ (distribution build output, same as release/)

CommsLink Local AIf7a3b8be

Local AI download: fix the 403, ship a current build, and update the public copy

CommsLink Local AI8cbb9cc9

Local AI: Models + System tabs, a permanent test ledger, and a working video backend

Aug 4, 2026
Atlasv0.0.174578df4f1

Atlas Live Build slices 3+4: graph-delta node-rise reveal + live semantic interiors (auto-enter the module on engine-behavior edits, breathe-pulse the changed symbol). Extension re-extracts and diffs consecutive graphs into an AtlasDelta; new nodes rise from nothing. Interiors already render symbols as machines/doors/silos; now the changed symbol lights while the AI works. Ext v0.0.174

Atlas29c8cc0a

Atlas Live Build (slices 2+5): per-shape animation grammar — each of the 8 change-shapes now gets a distinct accent color + burst emphasis (vertical-slice cyan, demolition red, new-module green, reskin pink...), and layer-flow/vertical-slice pulse a FLOW down the spine data→UI (reuses TraceFx). Banner labels carry a shape glyph

Atlas4e335b08

Atlas Live Build (slice 1): classify a live change into a FEATURE SPINE + shape (changeShape.ts, pure+tested), and light the spine + its wiring while the city dims (scene.setBuild + agent 'build' action). Press B on /atlas for a live demo. Design: docs/ATLAS_LIVE_BUILD.md

Aug 3, 2026
Carrier00280707f3

CLAUDE.md: remove the obsolete 'Reuse Over Rebuild — port Chat into other worlds' mandate — Carrier00 no longer integrates Chat (VR/room/companion removed); note it's a standalone browser MMO, don't re-add

Carrier008a56af8

Remove WebXR VR mode + the scanned command-room fusion + the AI companion/chat — Carrier00 is a browser MMO again (delete vr/room/companion/roomui/chat + ui panels; strip main.js wiring + import map)

Carrier00db81d38c

Rip out WebXR VR mode + the scanned command-room fusion + the AI companion/chat — back to a browser MMO (delete vr/room/companion/roomui/chat + ui panels + 6 kit bundles + bundle scripts; strip main.js wiring + import map). Naval game (carrier/aircraft/weapons/net/Commander AI) untouched

CommsLink Local AI8c69b79e

Chat avatar: fix unnatural head tilt while floor-sitting — replace a ±25° single-sine head roll (metronome wobble) with subtle breathing + a gentle multi-frequency sway (~±3°)

Aug 2, 2026
CommsLink Local AI46f9364f

Reframe Local AI + assistant everywhere: /ai-probe page (harness-first), llms.txt, chat-systems.md (chat-first, room/VR opt-in, companion->assistant), CLAUDE.md North Star, changelog label -> CommsLink Local AI

Landing4b7e3159

Reframe the AI Probe card as CommsLink Local AI (a local-first AI harness); reframe Chat card as an AI assistant (drop companion / real-room / VR wording)

Platform6cb22e49

Room settings: show the AI Commands list expanded by default (was collapsed)

CommsLink Chat5ffe062a

Chat avatar (desktop): camera now follows the companion — keeps her chest-height portrait centered as she walks around, preserving the user's orbit angle + zoom; yields to WASD fly, VR untouched

CommsLink Chat595f63cd

Chat avatar: default camera framing is now a chest-height portrait — center on torso, feet cut off, ~1ft headroom (face/torso/hands focus), pulled in from full-body

Carrier00739883f

Avatars: remove Alexis, Melon (cuddle/sleep), Enmiel 2, Aneki Sport from the picker roster

Carrier0076e23be6

Avatars: remove Alexis, Melon (cuddle), Melon (sleep), Enmiel 2, and Aneki Sport from both AI + player avatar pickers (Chat + Carrier00); delete their VRM files

CommsLink Chatac6254f6

Chat: new rooms default to just the companion — no scanned room auto-loads; My Space is now an opt-in toggle (avatar-only 'avatar' scene default in AvatarPanel + VrmEngine registry)

CommsLink Chat672f844a

Chat: new rooms default to just the companion — no scanned room auto-loads; My Space is now an opt-in toggle (avatar-only 'avatar' scene default in AvatarPanel + VrmEngine registry)

CommsLink Chat0ffd989b

Chat: chat-first defaults — new rooms default to Eve (from her template) on an avatar-only 'myspace' scene (no legacy bedroom world), and the avatar panel defaults to 25% width

Landing8bc46536

AI Probe: landing card reframe (full suite + desktop download + live API) & Ships-feed label 'AI Probe'

CommsLink Local AId306e1e0

AI Probe API: expose capability probe suite (navigation/reasoning/knowledge/reflection/instruction/tool-use) via /exam?type= + /grade; single-source generators into shared recallBench lib

CommsLink Local AId40fab93

AI Probe: local analysis suite (9 probes, hub, capability matrix) + /ai-probe page reframe with desktop-tool download

Jul 25, 2026
CommsLink Local AI1ef2b56c

AI Memory Probe: auto-generate a unique exam every request. New services/web/lib/recallBench/generate.ts — a seeded, deterministic generator builds a long conversation (~480 turns / ~42 questions at the default level) of randomized, un-guessable facts (invented names/numbers/places), with mid-convo updates and same-category distractors so binding is hard. GET /exam mints a random id and returns turns+questions (key withheld); POST /grade REGENERATES the identical exam from that id to score — stateless, nothing stored, no exam reusable. Replaces the fixed 8-question demo. Levels 1/2/3 scale length+density. Page shows a small generated preview. +5 generator tests; 887 pass

CommsLink Local AIbb54b334

AI Probe: fix /recall-bench redirect — use a next.config 308 (real Location header) instead of a page-level redirect() that prerendered into a broken cached 307. Add /ai-probe to the no-store list so the live-iterated tool isn't cached for a year

CommsLink Local AI5ea22777

Rebrand Recall Bench -> CommsLink AI Probe (the AI Memory Probe). It's now API-first: a self-diagnostic an AI runs on itself, not a human playground. Page /ai-probe leads with API access (mint key + pastable instructions) and shows a sample exam below; removed the memory-strategy picker + reference-strategy runs. Route /recall-bench 301-redirects to /ai-probe. API paths renamed to /api/v1/ai-probe/* with /api/v1/recall-bench/* kept as aliases (earlier keys still work) via a route factory. Landing card, llms.txt, changelog classifier updated; 885 tests pass

CommsLink Local AI46c843f8

Recall Bench: attach the session token to authed calls. The API-key panel now gates on useSession().isLoggedIn (not a bare 401), and both key management and the real-model Run send Authorization: Bearer <token> — signed-in users can mint keys and run models instead of seeing the sign-in prompt / a 401

CommsLink Local AI6735eaff

Recall Bench: sign-in link carries returnUrl=/recall-bench so login sends you back here instead of the 'which app?' picker

CommsLink Local AI751ab3fc

Recall Bench API — external AIs can take the memory test themselves. Sign in at /recall-bench, mint a clb_ key (reuses the user_pat store with a new recall:run scope — no migration, kept separate from Bench), and copy a pastable instruction block for any AI with web access. New endpoints: POST/GET/DELETE /api/v1/recall-bench/keys (session), GET /api/v1/recall-bench/exam + POST /api/v1/recall-bench/grade (session or key). The exam serves the conversation + questions with the answer key WITHHELD; grading is deterministic (no LLM, no credits — the AI brings its own compute). core/actions/recallBench/{patsAction,examAction}; ApiAccess component; llms.txt documents the endpoints; +3 tests

CommsLink Local AI587caa0d

Recall Bench (/recall-bench): live conversational-memory benchmark on the landing page. An AI overhears a scripted conversation one line at a time, then is quizzed on planted facts at increasing distance; grading is deterministic exact-match, so no AI judges an AI. Free reference strategies (perfect/none/fixed-window) run in-browser; real models (Grok/Claude) run server-side via POST /api/v1/recall-bench/run and cost credits. Pure engine in services/web/lib/recallBench shared by the page + api (COPYd into the api image like lib/bench); recall-vs-distance curve + static/update/distractor sub-scores. Adds classifier PATH_RULE, llms.txt entry, landing card, and tests

Jul 24, 2026
CommsLink Chat0f1046bc

Models: refresh the AI model picker to xAI's current lineup (verified live + smoke-tested). Room settings now offers Grok 4.5 / 4.3 / 4.20 (Reasoning) / 4.20 (Fast) instead of the retired grok-4-1/grok-3 IDs (existing agents keep working via aliasing). Default → grok-4.20-0309-non-reasoning; passive L2 comprehension moved off the retired grok-3-mini to grok-4.20-0309-non-reasoning. Left out grok-4.20-multi-agent (non-standard response format)

CommsLink Chatc68e0b54

Passive mode v2 — 3-layer listening pipeline. L1 (client PassiveMode) now streams continuous ~1.8s transcription windows (passive_fragment) instead of waiting for silence. L2 handlers/chat/passive/comprehension.ts (cheap grok-3-mini) assembles noisy overlapping fragments into clean COMPLETE THOUGHTS. L3 cognition.ts (room agent's model) maintains a running conversation model (topics/open-questions/decisions) and runs the gate against it, anticipating. Orchestrator passive/index.ts owns state + inter-layer valves (L2 debounce, L3 cooldown, speak cooldown); chat-log echoes clean thoughts ephemerally. Replaces the single-window gate; isolated from the reactive path; credit-metered at each layer. chat-systems.md updated

Landing9eea08ce

Changelog classifier: route chat-only components (PassiveMode/EveEars) + 'passive mode' subjects to CommsLink Chat — fixes the VAD-latency passive commit showing as Platform. +1 test

Landingca216dda

Changelog classifier: skip deploy-regenerated changelog/code-activity artifacts (they auto-stage into every commit and were dragging commits to 'landing'), and add an Asset Forge project rule (packages/asset-forge, app/assets, the standard doc). Fixes passive-mode showing as Landing (now CommsLink Chat) and Asset Forge showing as Landing (now Asset Forge) in the Recently Shipped feed. +2 regression tests

Landing5975ecb5

Add Asset Forge product card (→ /assets) — turn photos into CommsLink-conforming 3D objects locally on Windows

Asset Forge729f18b3

Ship the /assets download page + the asset-forge package (Phase 0-1). A local Windows Electron app turns photos into CommsLink-conforming .glb objects entirely on-device (nothing uploaded/stored); v1 engine is a GPU-free 2.5D relief with the full-object GPU model as a drop-in behind the same conform.ts pipeline. Output follows docs/COMMSLINK_ASSET_STANDARD.md (GLB, +Y up, meters, base-center origin, +Z front). Binary hosted as a public GitHub Release asset (no git/image bloat); /assets links to it. Build outputs gitignored

CommsLink Chat0972289b

Passive mode: cut transcript-entry latency. The mic component buffered a fixed 12s before transcribing (long delay after speaking). Replaced with voice-activity detection — it flushes to in-browser Whisper ~0.65s after you pause (or after an 8s monologue cap), accumulating only while speech is present. A sentence now transcribes right after you stop, not up to 12s later; silence-trimmed chunks also read cleaner

CommsLink Chat8f70b4ab

Passive mode fixes from live testing: (1) no more repeat answers — a transcript watermark means the gate only reasons about speech newer than what it already handled, and it's fed its own recent notes with a hard 'never repeat' rule + a normalized-dedupe guard; (2) everything heard now posts to the chat log as an ephemeral system-styled '(passive audio)' line so you can see what's being heard (not persisted); (3) surfaced notes now fire the normal agent_typing 'about to speak' cue/sound ~700ms before landing, same rhythm as a real reply. Backend-only (passive.ts); type-checked via scoped tsconfig

Jul 23, 2026
CommsLink Chat89a01f57

Fix passive.ts crash-loop: GrokResponse exposes the reply as res.text, not res.content (local tsc aborted on the pre-existing hapi__inert stub before checking the file, so it slipped through). Restores API after the passive-mode deploy took the site down

CommsLink Chatd9f139c1

Chat: passive voice mode — the room AI listens and offers context unprompted. New isolated handlers/chat/passive.ts implements the response GATE: an in-browser Whisper mic transcript (PassiveMode component, on-device, nothing stored) streams up as passive_transcript; the gate keeps the agent SILENT unless it can surface something genuinely useful, which it TYPES as an 'overheard this' aside (never spoken). Chattiness knob (quiet/balanced/chatty) tunes the threshold; rate-limited, credit-metered, and fully decoupled from the chat_message/runAgentResponse hot path so it can't destabilize normal chat. Thin passive_start/stop/transcript dispatchers in index.ts; prunePassive on room delete; ephemeral transcript echoed to the room (visible listening). chat-systems.md documents it

Atlasv0.0.1734d597230

Move the Voice toggle INTO the terminal panel (user's original ask). A speaker button now sits just left of the terminal's minimize (-) control — lightly visible at rest, green with a glow when on, an accent speaker with a mute-X when off. Wired webview->host via voice:toggle/voice:query/voice:state; toggleVoice + onVoiceStateChange event in voice.ts keep the terminal button and the 'Atlas: Toggle Voice' palette command in sync. Dropped the status-bar item that shipped in 172 (it confused placement). Behavior unchanged: first enable consents + installs the Stop hook in ~/.claude/settings.json; native say/SAPI speaks last_assistant_message with code/paths stripped

Atlasv0.0.172bb80266f

Hands-free Voice — Claude Code speaks its replies aloud. New status-bar Voice toggle installs a Claude Code Stop hook (media/voice-hook.mjs, staged to a stable ~/.atlas/voice dir that survives extension updates) speaking last_assistant_message through the OS voice — say (macOS), SAPI/PowerShell (Windows), espeak (Linux) — code blocks/paths/markdown stripped, a new answer interrupts the old via pidfile. Pairs with Claude Code's built-in /voice for input; also speaks replies to typed prompts. Muted by default, gated by a flag file, one-time consent before writing ~/.claude/settings.json. New voice.ts keeps extension.ts a thin caller. Manifest + download page + vsix bumped 0.0.171 to 0.0.172

Jul 19, 2026
CommsLink Bench6a03a6f7

Bench: servos + 3D-printed plastics — design a robotic hand. New parts: Micro Servo (SG90-class, SIG/VCC/GND, articulated horn), Printed Plate (palm/chassis PLA), Printed Beam (finger segment). New program op 'servo <PIN> <angle>' (0-180) drives any servo whose SIG nets to that GPIO; horns lerp at ~300deg/s with wires chasing the moving pins. Attachment hierarchy: printed parts screw onto a servo HORN (swing with the commanded angle), servos/parts bolt onto printed plastic at the drop point — scene-graph parenting makes a plate→servo→beam→servo→beam finger chain articulate for free, with cycle guards in both UI and sanitize. Fuse math knows servos (~0.5A each on 5V). Agent API: attach_component gains hornOf / onPart+dx/dz, catalog + bench.md + MCP updated. 8 new engine tests (866 green)

Jul 18, 2026
CommsLink Bench4238337a

Bench: two UX fixes. (1) Sprockets ROTATE now — R on a selected sprocket silently no-op'd because sprockets render in the frame layer, not the mat registry the R-handler updated; the handler now re-aims via frameLayer.applyPositions, and LOOSE sprockets finally honor their rotY (axle aims from it, same convention as a motor shaft — previously hardcoded to +x, so rotation could never show). Bar/shaft-mounted sprockets still take their axle from the steel/shaft, as they should. (2) The validation/warning panel moved from bottom-left to bottom-RIGHT — the fabrication section made the left palette tall enough that the warnings covered it. 858 tests green; web build clean

CommsLink Bench99dfa316

Bench: DELETE for fabrication objects. Click a steel tube or a chain to SELECT it (white emissive highlight; clicking a bar also still starts the assembly drag, nearest-hit-wins between chain and bar) — then X/Delete scraps it: a deleted bar takes its welds and frees anything bolted to it (parts stay where they lie); a deleted chain just unloops. Deleting a SPROCKET (or any component) now also cleans up properly in the scene, matching the API op semantics: its chains go with it and a deleted motor frees its shaft sprocket — no more dangling chain tubes until the next server sync. Empty-click/Escape clears frame selection like everything else; palette hint updated (X deletes parts, wires, tubes, chains). 858 tests green; web build clean

CommsLink Benchaa611984

Bench: ONE BIG WORKBENCH — fabrication moves onto the table, and parts drag freely between mat and build area (both user asks in one model). The maker's-desk GLB is replaced by a large procedural steel-topped welding table (3.3m x 1.9m at the same work height) with the green electronics mat at its center; the fabrication layer (bars/welds/sprockets/chains, pad outline) now rides the tabletop instead of the floor. Because mat and build area share ONE surface and ONE drag plane, the old cross-space barrier is gone: drag any part across the mat's edge and it re-homes live mid-drag (mat -> build area sets onFloor + reparents to the table group; dragging back inside the mat rect returns it) — no more 'can't drag items from the table'. Build area = the whole tabletop (PAD_HALF_X/Z 1.55/0.85 replace the floor pad; sanitize/add_bar/move_bar clamps updated, add_bar default z 0.55). frameLayer group rides at table height with grinder/weld sparks converted local->world; camera pulled back for the bigger table. 858 tests green; web build clean

CommsLink Bench1a5f9408

Bench: bars can stand UP — vertical/tilted steel (user: 'how do i rotate it up vertically?'). FrameBar gains pitch (0..90°): while HOLDING a tube, T tilts it in 22.5° steps (flat→…→vertical→flat again); R still spins the heading. Geometry is honest: a pitched bar RESTS its low end on the floor (barCenterY/barPoint3/barDir3 — a vertical 3-footer's centre sits 18in up), its horizontal footprint shrinks with cos(pitch), and barsClosest went FULL 3D so a flat rail welds to an upright at its base (weld beads now store their height and render there). Guards where reality demands them: only a lone bar tilts (welded steel can't pitch one member — grind first), the grinder refuses standing posts ('lay it flat to cut — tap T'), and drop-bolting skips steep members. Bar-mounted electronics ride the bar top at the correct tilt-aware height everywhere (rebuild/drag/rotate). move_bar agent op accepts pitch (same unwelded guard); sanitize clamps 0..π/2. 858 tests green (vertical-bar geometry + base-weld + grinder-refusal test); web build clean. VR hand-tilt remains queued behind VR editing

CommsLink Benchcfafb3f6

Bench: R rotates the tube you're HOLDING. New pure rotateAssembly (frameGraph, tested for rigidity — end-to-end distances survive the turn): while dragging a bar, R turns the ENTIRE welded assembly 22.5° around the grab point — bars orbit the pivot with their headings advancing, weld beads and bar-mounted electronics ride along (mounted parts keep their orientation relative to the steel), sprockets/wires refresh live. This also LIFTS the old limitation: welded frames can now be re-angled without grinding a weld. VR hand-rotation noted as future work — VR remains view-only for now, so this is the desktop-grip rotate. 857 tests green (1 new); web build clean

CommsLink Bench26a97d5b

Bench FABRICATION update — cut, weld, and build a tracked robot. The floor in front of the desk is now a BUILD PAD at true metric scale. STEEL: drop 3ft sticks of 1x1in square tube (add_bar). GRINDER: click a bar to cut it at that exact spot (kerf, sparks, new grinder shriek sound; slivers under 5cm refused; grinding a weld bead pops the joint). WELDER: click two touching bars (within 4.5cm) to lay a bead (arc sizzle + flash) — welded bars are RIGID ASSEMBLIES via union-find: grab any piece and the whole frame moves, beads + mounted parts riding along; cutting a welded bar keeps each bead with the piece it was laid on. MOUNTING: drop any electronics part onto a bar and it bolts on (release-snap; mat parts jump down onto a bar under the pointer); wires keep working across desk/floor (world-space endpoints). DRIVETRAIN (#40 chain family, real pitch geometry r=p/(2sin(pi/N))): universal 9T motor sprocket bores onto a motor/starter shaft (drop-near-shaft snap, one per shaft), 15T free idlers + 30T drive sprocket bolt to bars as vertical discs; CHAIN tool clicks sprockets in loop order (first again to close) and the chain renders as a tube on the real wrap path — external tangents + arcs (chainPathPoints, tested) projected into the sprockets' vertical plane. SPIN: pure spinSpeeds propagates from running motors through chains at true teeth ratios (9T→30T = 3.3:1 reduction; the track chain then runs the idlers) — sprockets visibly turn when the starter cranks. Architecture: pure frameGraph.ts (cut/weld/assemblies/spin/chain-wrap, 13 tests) + new frameLayer.ts scene module (BenchScene stays a composition root); persistence sanitizes the frame domain + 10 new agent ops (add_bar/cut_bar/weld_bars/remove_weld/move_bar/remove_bar/attach_component/add_chain/remove_chain) with full guards (no rotating welded bars, one sprocket per shaft, chains only over placed sprockets); catalog patchOps + bench.md 'Fabrication' section + MCP updated. 856 tests green (30 new); web build clean

CommsLink Benchadcf32a1

Bench starter fixes (user couldn't find the negative terminal): (1) the GND stud was authored on the REAR mounting flange where the can occludes it — moved to a new visible GROUND LUG, a metal ear off the viewer's-left side of the case, clear of the can and on the front half (test asserts x outside the can span + z>0); (2) the housing itself is now a terminal: new CircuitPart.caseGround — while a wire is IN PROGRESS, clicking anywhere on a starter's (or standalone solenoid's) body clamps the wire to the case-ground stud, like grounding to metal in real life; without a wire in progress the body still drags. Catalog desc documents both for agents. 843 green; web build clean

CommsLink Benchd92f0ece

Bench: new part — F-150-style STARTER MOTOR with integrated solenoid, a 1:1 of the user's real hardware (the plain motor wasn't). Anatomy modeled exactly: the big can with the smaller solenoid riding it carrying ALL the wiring — B (always-hot battery stud), S (start-signal post), and the M post strapped INTERNALLY to the windings (visible copper strap; the catalog + validator tell agents/humans 'do not wire M'); ground is the HOUSING — a case stud on the rear mounting flange. Physics: the solenoid coil RETURNS THROUGH THE CASE, so an ungrounded housing = no click at all; S energized + case grounded → CLACK, internal B↔M bridge closes, and if the battery cable is actually on B the pinion cranks (motorShaft spin + snap sounds reuse the existing hooks). The two classic failure modes are first-class validator diagnoses: 'starter-unground' (housing not grounded — nothing clicks) and 'starter-no-b' (the click-but-no-crank: solenoid engages, B has no/dead battery feed). Current model: cranking = 150A — running the B cable through ANY blade fuse pops it instantly (the sim teaches never to fuse a starter cable), while the S control circuit draws a proper 4A (holds a 5A fuse — the RIGHT thing to fuse). 3D: can + nose + solenoid + copper strap + pinion shaft + grounded flange (addStarterBody). Palette/catalog/netlist/validate all inherit automatically. 6 new tests (crank, no-ground silence, click-no-crank, 150A pop vs 4A hold); 843 green; web build clean

← NewerPage 1 of 25Older →

Generated 2026-08-26 from git across all CommsLink repos · page 1/25, showing 1100 of 2,472 ships · complete record: /changelog.txt · /changelog.json.