← 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,356 ships and counting.

Reading this as an AI or a script? The complete record fits in a single request: /changelog.txt (all 2,356 ships, plain text) or /changelog.json (structured). This page shows 100 at a time.
All · 2,356CommsLink Chat · 686Carrier00 · 581Platform · 559Atlas · 268CommsLink Markets · 125Landing · 77AI-vertizing · 22Virtual Office · 14Terminal Agent · 14ai-npc · 6Forum · 3CommsLink Sounds · 1
Jul 16, 2026
Atlasv0.0.1631ab64e68

Clickable links in the map's embedded terminal (the 'classic console' behavior a custom xterm doesn't inherit). New PURE, unit-tested terminalLinks.ts (findTerminalLinks: URLs, file paths with :line[:col], bare filenames-with-ext, and path-like refs like functions/api-webhooks; qualifies slash-tokens so prose 'and/or'/'TCP/IP' don't link; strips trailing punctuation; 10 tests). terminalPanel registers an xterm link provider (underline+pointer on hover; click posts term:openFile/term:openExternal). Host: openTerminalFile resolves exact path (abs or workspace-relative)→open at line via revealFileAt, directory→reveal, else findFiles by basename→open sole hit, else fuzzy quickOpen (loose refs still land); URLs→vscode.env.openExternal (http/https only). Public atlas.md updated. Extension tsc clean; 738 tests green. Release ritual done

Landing82a624c9

Ships feed: fix 'AI only sees 100' — a render-everything HTML page is ~5MB and fetchers truncate it. (1) NEW /changelog.txt: the COMPLETE record (all 2354 ships) as one compact plain-text line each, 304KB — fits a single fetch (the AI-readable complete feed). (2) /changelog HTML is now PAGINATED (?page=N, 100/page, Prev/Next + page indicator) instead of the ?all=1 truncation-trap. (3) Prominent in-page note + llms.txt point AIs to /changelog.txt (complete) / .json (structured). gen-changelog writes changelog.txt; /changelog.txt on no-store list. 728 tests green

Landingeb27054f

Ships /changelog hardening for AI fetchers: (1) lighten the default server-rendered view 300->100 ships (~702KB->~250KB HTML) so fetchers with size caps don't truncate it — ?all=1 still renders everything, /changelog.json has the full record; (2) override the layout's generic OG/Twitter tags with the Ships title/description (AI fetchers were reporting the site-wide 'Talk to AI' default); (3) add /changelog to sitemap.xml. Origin already verified fixed (nginx-only, no CDN, no-store, old client-shell strings gone) — remaining staleness was the AI fetcher's own cache; a fresh URL (?fresh=1) returns the server-rendered ships

Landing3fb57fc7

Ships feed: make /changelog AI-readable + fix classification. (1) CRITICAL: /changelog was 'use client' — the ships loaded via a browser fetch, so any AI/crawler reading the URL got an empty 'Loading…' shell. Rewrote it as a SERVER COMPONENT (plain SSR HTML, inline styles, no client JS): ships are now in the initial HTML, filtering is server-side via ?project= (chips are links), + page metadata + a ?all=1 to render the full set. (2) Classification now uses each commit's CHANGED FILES (classifyByFiles + PATH_RULES) not subject keywords — fixes the self-referential bug where the Ships-feed commit filed itself under Carrier00 for naming it (now correctly Landing). Chat 310->686, carrier00 612->581 as false-positives clear. gen-changelog.mjs reads --numstat. 728 tests green (+ file-based classify tests)

Landingc4d27f3a

Ships feed: serve the full notable history (2351) not just newest-400, so every project (markets, ai-npc, office, sounds, research...) is actually filterable — a small cap dropped older projects and filtering them showed empty. Chip counts now computed over served entries so they always match. changelog.json ~834KB (no-store, dedicated page; landing still uses tiny changelog-latest.json)

Landing0f6e5d2e

Ships feed: an honest, git-derived changelog of what the AI ships to prod across every CommsLink project. New /changelog page (timeline, per-project filter chips, version tags, load-more) + machine-readable /changelog.json for agents (linked from llms.txt) + a compact 'Recently Shipped' strip on the landing's living-lab monitor (under the code-activity graph). Data: scripts/gen-changelog.mjs reads git log across CommsLink2+Carrier00, classifies each commit to a project + extracts version via the pure, unit-tested scripts/changelogParse.mjs (7 tests); writes public/changelog.json (400 newest of 2350 notable ships) + a tiny changelog-latest.json for the landing. Wired into deploy.sh Step 0 (regenerates every web deploy, fails soft) and next.config no-store list. 725 tests green

Jul 14, 2026
Atlasv0.0.1628ca6ff96

Changes-view supporting text readability. The file-path lines under each change row + the Explain It/Quiz launch-row sublabels used a hardcoded dark #5f748c — too dark on Voidspace, which sets --atlas-outline:none, so the text had no outline over the near-black void. Added a theme-aware --atlas-ink-faint token (uiSkin.ts: classic #8398ac, sleek/Voidspace #8797aa — both well above the old value and readable per theme) and switched the changes-view supporting text to it (AtlasViewer renderChangeRow file path + fit label; QuizPanel LearnLaunchRows scope detail / level prompt / saved-lesson sublabel via a new inkFaint const). Colors only; 718 tests green, extension tsc clean

Atlasv0.0.161a08393d8

Explain It teaches architecture + shows code. (1) Rubric (ATLAS.md Explain mode + DEPTH_SPEC): lectures must trace the real WIRING — entry point (route/socket/handler) -> action/function -> data layer, and what REGISTERS/HOOKS each piece — not just prose. (2) New slide schema field snippets[] {code,file?,lang?,caption?,kind:code|diff} (validated leniently in explain.ts cleanSnippets — a bad snippet never rejects the deck; capped 8/slide, 6k/code). (3) Split-pane UI: when a slide has snippets, ExplainPanel splits 42/58 — teaching left, a SCROLLABLE stack of code cards right (multiple snippets/slide). New read-only CodeBlock.tsx reuses the highlight.ts tokenizer; diffs render with +/- line coloring (classifyDiffLine) over highlighted code; langFromHint maps lang names/exts. (4) FIX: .atlas/.gitignore now un-ignores lessons/ (was '*'). Public atlas.md updated. Extension tsc clean; 718 tests green. Release: package.json + page.tsx + version json + rebuilt served .vsix

Atlasv0.0.160076382e5

Syntax highlighting in the code popup. Opened files were plain white text in a textarea; now they're colored (comments/strings/keywords/numbers/types/function-calls, VS Code Dark+ palette) for TS/JS/TSX, JSON, CSS/SCSS, Python, shell, YAML, HTML, with a generic c-family fallback. Approach: a NEW dependency-free pure tokenizer highlight.ts (sticky-regex rulesets per language, +8 tests incl. XSS-escape + a char-exact round-trip invariant so the color layer aligns with the editing layer) — no highlight.js/Prism/CDN (keeps the shared bundle lean + dodges the webview CSP). Rendering: new CodeEditor.tsx overlays a transparent-text textarea (visible caret) over a highlighted <pre>, scroll-synced, identical font metrics; EditorPopup uses it via langForPath(path). Editing/saving/lint unchanged. Size-guarded (>80k chars → plain) for typing perf. Extension tsc clean; 712 tests green. Release ritual: package.json + page.tsx EXT_VERSION + version json + rebuilt served .vsix

Atlasv0.0.159fd6dcf8f

Explain It lessons are saved and reopenable. Every delivered lecture is auto-persisted to .atlas/lessons/<id>.json and listed under the 📽 Explain It launcher; clicking one replays it instantly via the normal 'explain' broadcast — NO AI running, nothing regenerated (fixes: previously the AI had to rebuild a lecture every time). Per-repo storage so committing .atlas/lessons/ shares the library with anyone who clones (a new teammate inherits the walkthroughs). Each saved lesson has a × to delete. Arch: new PURE module lessons.ts (id/slug/meta/sort, +10 unit tests) does the shaping; quizHost.ts does fs (saveLesson on deliver, listLessons/openLesson/deleteLesson with LESSON_ID_RE path-traversal guard + validateExplain on load); extension.ts adds explainLessons/explainOpen/explainDelete handlers; webview.tsx bridge (listLessons/openLesson/deleteLesson); QuizPanel LearnLaunchRows shows the library above the create-new flow and fetches it independently of the AI probe (reopen needs no AI). Dedupe by scope+depth via stable filename id. Public atlas.md updated. Extension typechecks clean; 704 tests green

Atlasv0.0.15858108f4e

Explain It + Quiz me are now large centered windows (~92vw x 92vh) that fill most of the screen, for easier reading/engagement. Both were small corner-ish panels (Explain 680px/78vh centered, Quiz 560px/72vh bottom-anchored); now both center at min(1180/1100px,94vw) x min(900/880px,92vh). Content scaled up for legibility: Explain slide title 1.05->1.7rem, bullets 0.86->1.1rem; Quiz question 0.9->1.22rem, options 0.8->1rem, score rank 3.2->5rem, and the score screen is vertically centered. Text sits in a centered ~820-860px reading column so lines stay comfortable in the wide window. Shared btnStyle base bumped (Slack dock buttons override size inline, unaffected). Lecture/exam behavior unchanged (arrow-key paging, camera-tour refs). Release ritual: package.json + page.tsx EXT_VERSION + version json + rebuilt served .vsix. 694 tests green

Atlasv0.0.157ee7ec071

Slow the click-to-focus orbit to 16s/revolution. Previous 4s was FASTER not slower (fewer seconds/lap = quicker spin) — I inverted the user's 'make it slower' intent last round. ORBIT_SECONDS 4->16 = a leisurely turn (~1/4 the speed). Frame-rate-independent update(dt) retained so it circles identically on Mac and Windows, 60Hz and 144Hz (the 'too fast on both' report confirmed that fix landed — the speed was just set too high). Release ritual: package.json + page.tsx EXT_VERSION + version json + rebuilt served .vsix, public atlas.md 4s->16s. 432 atlas tests green

Jul 13, 2026
Atlasv0.0.156f2b88891

Click-to-focus orbit tuning + frame-rate fix. (1) Slowed the click-orbit to one revolution / 4 seconds (was 8). (2) ROOT CAUSE of 'too fast': controls.update() ran with no delta-time, so OrbitControls stepped a fixed angle PER FRAME (~60fps assumption) and spun ~2-2.4x too fast on 120/144Hz displays. Now update(dt) makes autoRotate frame-rate independent — 60/speed seconds is a TRUE period on any refresh rate (three r180 supports update(deltaTime); verified formula 2PI/60*speed*dt). This also brings the idle establishing drift and activity-focus orbit back to their nominal cinematic speeds on high-refresh screens. (3) Click-to-focus frames 25% closer (ZOOM_MARGIN 1.125 vs the neutral 1.5 fit), still floored by minGap so the camera can't enter the object's skin. Release ritual: package.json + page.tsx EXT_VERSION + version json + rebuilt served .vsix, public atlas.md 8s->4s. 694 tests green

Atlasv0.0.15580b5668a

Click-to-focus now keeps circling the clicked object. After a click flies the camera to frame an object, the camera orbits it at one full revolution / 8 seconds (OrbitControls autoRotate, speed 60/8=7.5), so the user sees the object and its neighbours from every side hands-free and can just click the next thing that drifts into view — the map becomes fully navigable by clicking alone, no WASD/orbit fluency needed. New orbitSelected flag set in zoomToNode (resets autoRotatePausedUntil so the spin begins the instant the fly-in lands); cleared on deselect/edge-select/highlightSet/activity-focus and on WASD flight (manual nav takes over). A drag pauses it 6s then it resumes on the still-framed object, matching the focusId orbit. Release ritual: package.json + page.tsx EXT_VERSION + atlas-extension-version.json + rebuilt served .vsix, public atlas.md updated. 694 tests green

Atlasv0.0.1548f3a01fe

Reconcile merged PR #21 (workspace-shadow window-theme fix) with 0.0.153 click-to-focus. PR #21 nailed a deeper root cause of the Mac 'theme not applied' report: workspace-scope workbench.colorCustomizations (a checked-in Peacock .vscode/settings.json coloring title/activity/status bars) out-rank Atlas's global-scope tint PER KEY, so exactly those bars kept old colors while the rest themed — not a Mac-only bug, Mac just hit it. Fix: parkShadowingWorkspaceColors moves colliding workspace keys aside while a theme syncs and restores them verbatim on sync-off; applyWindowTheme now seeds from inspect().globalValue (was leaking workspace keys into user settings); ensureMacTitleBar defers to VS Code's own restart prompt (titleBarStyle needs a full restart, not a reload — my 0.0.152 'Reload Window' button couldn't apply it). The macOS custom-title-bar flip is KEPT (both are needed: custom bar so titleBar.* is honored at all, plus parking so global isn't shadowed). Reviewer additions: extracted the bug-prone parking set-math into pure reconcileParkedColors() + 7 unit tests; bumped to 0.0.154 (both 0.0.153 vsixes collided) and completed the release ritual (page.tsx + version json the PR omitted). 694 tests green

Atlasv0.0.153353e81a0

Click-to-focus camera. Clicking any 3D object now flies the camera to frame it — centered and sized-to-fit via the object's real bounding sphere (a lone component and a skyscraper both fill ~2/3 of the view) — while PRESERVING the current viewing angle (it comes into view from where you are, not a canned angle). Makes the map fully navigable by clicking alone, for users who aren't fluent with the WASD/orbit controls. Reuses the existing camTween Superman-flight rig with a gentler arc; grabbing the mouse or flying with the keys cancels it (onPointerDown already does). Only fires on SELECT (not deselect, not planes, not empty space) and, unlike the Changes-list focusCameraOn, does NOT resume the idle auto-orbit. Frame-to-fit math extracted to pure cameraFraming.frameDistance() + 6 unit tests (687 total green). Public atlas.md updated

Atlasv0.0.153cbff5ceb

Window tint now overrides workspace colorCustomizations; macOS title bar needs a restart, not a reload

Atlasv0.0.15263b2cecf

MacOS window-theme fix. The title bar (and any activity-bar icons relocated into the top strip via compactRail) never followed the Atlas city theme on Mac while Windows/Linux always did. Root cause: macOS defaults window.titleBarStyle to 'native' — the OS draws the bar and VS Code IGNORES every titleBar.* / top-strip colorCustomization while native; Windows/Linux default to the custom bar so the tint applied. Fix: new ensureMacTitleBar() flips window.titleBarStyle to 'custom' (darwin only) while a non-default theme is synced, remembering the prior value so turning syncWindowTheme off / returning to the default theme restores exactly what the user had; a non-blocking 'Reload Window' prompt applies it (titleBarStyle needs a reload). No-op on Windows/Linux. Setting description updated to disclose the behavior. 681 tests green

Atlasv0.0.15117dc498d

Slack overhaul. (1) Dock = one channel of ALL DMs + @s + YOUR replies interleaved (classify emits a 'sent' kind for self-authored DMs; slackAlarm SlackKind+badge exclude 'sent'). (2) Resizable dock — drag the top grip to pull it up (persisted). (3) Soft beep on each new DM/@ (webview, gated by the 🔔). (4) RELIABILITY: multiple editor windows each catch a different subset (Slack fans each event to ONE Socket connection) — windows now POOL received messages to a shared machine-global dir (~/.atlas-slack/pool-*.json) and merge (pure mergeMessages, tested) so every dock shows the union. (5) Setup-once: secrets.onDidChange listener connects other windows when tokens are set anywhere. Panel reads at the 0.83 panel-strong glass. 681 tests green. (Known: 'claude:' phone command still runs in whichever window's connection Slack picked — leader election deferred.)

Atlasv0.0.15020bbe533

Noir theme polish. (1) package-district plates use greyscale (new districtSaturation theme field=0 for noir) instead of the rainbow hash-hue that produced a purple plate. (2) AWS account boundary dashed line + label take theme.containerEdge (grey in noir) instead of a hardcoded blue 0x46618c. (3) building FINISH is now per-theme (new buildingOpacity/buildingRoughness/buildingMetalness fields, applied to module/page/skyscraper/compute materials + applyHighlight on-opacity) — noir set to opaque + low-roughness + metallic for glossy wet-street chrome; other themes keep matte defaults via ??. 676 tests green

Atlasv0.0.1490b24d20f

Noir Terminal theme iteration — restore its 'black-and-white with a single red pulse' identity. The pipe-consolidation work had leaked amber (conduit) + green (statePipe) + amber (component) into the monochrome; now red is the ONLY colour (client 'case-thread' pipes + red S3/page-edge evidence markers), and conduit/state/component are tonal greys (bright/steel/dark) told apart by DEPTH not hue. Deeper black bg, pure-white ink curbs + brighter module edge outlines, lower ambient + stronger key/rim light for edge-lit noir contrast, neutral-grey container tints. 676 tests green

Atlasv0.0.148394d013b

Ship the .vsix + version through the download flow. Prior commit bumped package.json but left public/atlas-architecture-map.vsix at the old 0.0.147 build and EXT_VERSION unbumped, so the served extension lacked the WASD/Space typing fix. Copy the new .vsix into services/web/public and bump EXT_VERSION to 0.0.148 so /atlas serves the fixed extension

Atlasv0.0.148b93827b0

WASD/Space flight controls no longer fire while typing. scene.ts onKeyDown routed every window keydown straight into camera flight — so Space (preventDefault'd as fly-up) got swallowed the instant you typed into the terminal or the file-query box, and W/A/S/D flew the camera mid-keystroke. New typingInField guard skips flight when the key target is an INPUT/TEXTAREA (xterm types into a hidden textarea)/SELECT/contenteditable, so the scene only flies when it truly has focus. Extension repackaged. 676 tests green

Atlasv0.0.1473a0924d9

Map opens as a full editor tab, not the narrow sidebar. The activity-bar view was a WebviewView (sidebar) which forces an un-closeable empty editor beside it (user-reported); it's now a thin launcher whose resolve opens the map via openAtlas. openAtlas reworked: single reusable tab (reveal if open) in ViewColumn.Active (main editor group) instead of ViewColumn.Beside (a split). Session (scene/camera/terminal) unchanged — lives in getSession regardless of surface. 676 tests green

Atlasv0.0.14643a82a61

Clicked-module detail panel less transparent — new --atlas-panel-strong skin var (= the terminal's 0.83 veil, per-theme) applied to the selection card so a selected module reads clearly against the scene, matching the terminal opacity bump

Atlasv0.0.145deb7f19a

Pipes strictly 90 degrees everywhere. Fixed two diagonal stub sources the bundling introduced: bundleRoute emits an orthogonal node->lane bend for ends the wall-approach doesn't reshape (endpoint doors); approachWall inserts a right-angle corner so the anchor(grid crossing)->leadIn join is axis-aligned then perpendicular onto the centre-line, both corners outside the wall. New orthogonality tests (all legs axis-aligned). 676 tests green

Atlasv0.0.1449874b69f

Real pipe consolidation via flow-biased bundling. New pure bundleRoute.ts (+tests): routes utility pipes one at a time on a shared coarse lattice with a per-edge USAGE discount (a used trunk edge costs ~quarter) + turn penalty, so later pipes JOIN existing trunks instead of cutting new lanes — many routes collapse onto a few trunk corridors with short branches (transport network). Longest-first order lays the trunks. Client/state/component all bundle on it; removed the superseded utilityGrid/directIfDetour/pathLength + their tests. 675 tests green

Atlasv0.0.1433b0db4f2

Underground pipes consolidate into a transport network. New pure utilityGrid (routing.ts, +tests) builds one shared orthogonal lattice (bounded to 12 lanes/axis for O(nodes^2) router perf) covering the whole account; client, state, and component pipes all route on THIS grid instead of each going solo-direct, so parallel runs share trunk lanes (overlap -> visually one tube under x-ray normal blending) and branch to nodes. Grid covers everything so no detours; directIfDetour retained as a no-op safety. 679 tests green

Atlasv0.0.142fa8eb8b2

Each shared component runs its OWN pipe. Component pipe network is now per (component,page) usage — gridEdges built as component->page from split.pagesDrawing (was a single synthetic PLANT_ID->page trunk for the whole plant); each pipe rises from that component's plant unit (new plantUnitConnect in pipeConnect, +unit registered in pipeConn) into the page wall. Removed the synthetic PLANT_ID/gridPos + gridMatch/compUsers; power grid now highlights via the standard touches matcher (real cid->page edges), so selecting a component lights its pipes and selecting a page lights its components' pipes. 676 tests green

Atlasv0.0.14126cb9b03

(1) component plant pipes are now a full underground network on their OWN deepest layer (trunkY -16.8, below client -10.4 and state -13.6), matching the pipe grammar (full opacity/radius) instead of thin overhead power lines — three distinct stacked underground networks, each its own theme color; doc updated. (2) terminal veil +50% opacity (0.55->0.83) for readability. 676 tests green

Atlasv0.0.14056eb7197

Direct utility-pipe routes are ORTHOGONAL (single 90 degree bend) not diagonal — directIfDetour now returns an L-path (longer leg first; straight when axis-aligned) instead of a slanted straight line, so pipes that skip a far road stay organized on the grid; tests updated. 676 tests green

Atlasv0.0.13943d1ea67

Underground/overhead utility pipes stop detouring to distant roads. New pure directIfDetour (routing.ts, +tests): if a road-following route is > 1.5x the straight-line distance (+6 slack), the client/state/power-grid pipe goes DIRECT instead of crossing the map to borrow a street and crossing back; data conduits still ride roads by design. Also fixed a strict-mode index type (gridPos: Record<string,Vec3>) the extension tsc caught. 675 tests green

Atlasv0.0.13860f77f08

Pipes are selectable + hoverable. TubeNetwork.pickPath raycasts its x-ray tubes and maps the hit back to the nearest path (edge) via pure pointToSegmentDistance (tested); TubeNetwork.setHover draws a light bright overlay (pipe hover, no beads). Scene: pickPipe across all 4 networks (closest), selectPipe (real edge -> selectEdge, power grid -> select the page node); pointer precedence real-node > pipe > ground/district plane so underground pipes over the ground stay clickable; throttled pipe-hover raycast with pointer cursor. 670 tests green

Atlasv0.0.13796b0693b

Default flight speed = the old Shift-boost speed (90->300); Shift now boosts faster still (300->600); FOV surge renormalized to the new max

Atlasv0.0.136255dba66

Camera/navigation overhaul — (1) starts zoomed in with the orbit target ~4 units ahead so mouse-drag looks around instead of orbiting the whole map; (2) removed the floor lock (maxPolarAngle=PI + dropped the WASD y-floor guard) so you can fly below the world; (3) Space = fly straight up (preventDefault so it never scrolls); (4) doubled cruise speed (45/150 -> 90/300) with a ~1s accel ramp (tau 0.45); (5) faster zoom (controls.zoomSpeed=3, minDistance 0.4); (6) removed the flight wind sound (scene wind dispatch + AtlasViewer wind-audio effect gone); (7) idle auto-orbit: after 30s with nothing selected and no camera input, fly out to a wide establishing shot and slowly orbit the whole scene, cancelled by any interaction. 666 tests green

Atlasv0.0.13596fa1e06

(1) state pipes split out — page<->store reads/writes now render as their own TubeNetwork in a distinct per-theme statePipe color (added to all 10 themes + resolveTheme fallback) at trunkY -13.6, one level below the client API pipes (-10.4), so the two underground paths never blur; wired into select/spotlight/edge highlight + tick + dispose. (2) celebration toasts themed to the active palette (pushed=accent, commit=theme mint) + restyled as skin BracketPanels (glass/brackets/condensed font) instead of fixed green/blue fat text. (3) celebration chime audible again — AudioContext now primed on first pointer/key gesture so background git-triggered chimes aren't blocked by the autoplay policy. 666 tests green

Atlasv0.0.134b5a70d74

Fix selection not de-highlighting the previous plane. Root cause: host ground slab + container district floors are selectable nodeVisuals, but applyHighlight SKIPS host/container ('context platforms stay lit'), so the animate loop's cyan body-emissive crank on them was never reset — clicking another object left the previous plane glowing. Fix: new pure SelectionGlow helper owns the selected body's emissive and restores the previous material on every selection change (cleared in setSelectionVisual, driven in animate, forgotten on rebuild). Unit-tested incl. the exact host/container case. 666 tests green

Atlasv0.0.133a1d3493b

Pipes now TOUCH the object they serve. Root cause: pipes terminated at floor height, but a water tower's tank body sits high on legs (y 4.2-6.8) so a floor pipe connected to nothing; houses connected at the base edge. Fix: new shared pipeConnect module is the single source of truth for WHERE a pipe meets each object (wall radius + body height + overlap), derived from the real mesh geometry — water tower pipe rises to the TANK, house/skyscraper pipes meet the wall part-way up, silo pipes meet the flank, all overlapping slightly into the surface. Rewrote pipe tests to assert the endpoint lands ON the object's real 3D body (pointTouchesBody) — the check the old tests lacked; incl. a regression guard that a floor point does NOT touch the tank. 660 tests green

Atlasv0.0.1323c50a34a

Rewrote pipe terminal-approach geometry — replaced the radial trimPathTail (cut the street path wherever it crossed the wall circle → off-center / short) with approachWall, which enters perpendicular and centered on a face/radius and terminates exactly at the wall for EVERY pipe type (client subways, data conduits, component power grid, datastore silos); unified all four routings onto one pure function; EXTENSIVE new pipe test suite (tubePaths approachWall + full routeEdges→approachWall→verticalProfile pipeline in pipes.test.ts, incl. the building-hugging-its-road bug + all approach directions) — 653 tests green

Atlasv0.0.1318242ef86

Client pipes + component power lines terminate AT the page wall and water-tower base, not through the object's center — generalized the datastore silo-wall trim (new pure trimPathTail in tubePaths.ts with a gap param + 4 unit tests) to pages/stores via a clientStopRadius map, and pipe/grid endY drops to floor level (0.6) at the wall so the pipe leads TO the house/tower instead of rising up inside it; datastore trim now delegates to the shared helper

Atlasv0.0.1306459a482

Selection glow-up — clicked item takes a single signature ice-cyan glow (SELECT_COLOR, same on every theme) with a heavy pulsing+breathing halo hugging the mesh and a heavy signature emissive on its body; connected pipes/conduits/power-grid render in the signature color (thicker) with FLOWING energy beads traveling source→dest (TubeNetwork.tick, world-paced, positionOnPath pure helper); tube highlight recolored white→signature; atlas.md gains a Selecting section

Atlasv0.0.129d68b112e

Endpoint doors theme-tinted — new per-theme door color on all 10 themes (a lit-doorway hue in each palette), replacing the fixed HTTP-method door colors; method still shown on the selection card; legend + ontology updated; default preserves old light-blue for pre-field custom themes

Atlasv0.0.12865c9a4d5

Component plants + state-store water towers now theme-tinted (new per-theme store/component colors on all 10 themes, defaults preserve old custom saves); component→page power lines rebuilt as a real routed overhead grid (trunk out of the plant branching down each drawing page along the street centerlines, x-ray tube grammar) replacing the straight catenary wires; selection/spotlight light the grid via plant-unit→page adjacency; default terminal width +50% (320→480, min clamp too)

Atlasv0.0.12794dc1313

Terminal hide/kill controls moved to the top-right corner (inset beside the resize grip); extension typecheck hardened — tsconfig pins types:[node], @types/vscode + @types/js-yaml declared as root devDeps (were phantom installs pruned by yesterday's reinstall)

Jul 12, 2026
Atlasv0.0.1269aa72f37

3D label v2 — 2x supersampled canvas textures (sprite scale from logical dims so world size unchanged, texture 2x sharper), LinearMipmapLinearFilter + anisotropy 4 (kills the pull-back shimmer the old Linear-only minFilter caused), condensed LABEL_FONT_STACK at weight 400 with 1.2px letterspacing on EVERY theme (labels + panels = one typography), theme-tinted rounded glass chip (bg derived from theme.background at 45% + 0.78 alpha, whisper stroke) replaces the flat dark bar; ctx.letterSpacing/roundRect guarded for older canvases

Atlasv0.0.12503cde146

Terminal window controls — ghost − (hide; display:none, pty lives on) + × (kill: host term:kill disposes the session + clears saved scrollback; xterm reset; reopen spawns fresh via term:start) at the terminal's top-left on hover; new command-prompt SVG icon beside the folder toggle in the Changes panel Row 0 toggles visibility; two-way sync over 'atlas-terminal' window event, persisted in atlas.termOpen

Atlasv0.0.1248dba2cb7

Paper Blueprint v2 — the light pastel version (fought the dark UI system, washed out) becomes a TRUE CYANOTYPE: bg 0x0d2f56 blueprint blue, WHITE drafting linework (curbs/edges/frames/labels eaf4ff), redline conduits 0xff8a5c, white pipes, uniform container fills differentiated by white frames, flat drafting light (ambient 0.85/sun 0.45), white chalk clouds. atlas.compactRail setting: opt-in half-size rail icons via workbench.activityBar.location=top (in-place icon sizing not exposed to extensions); OFF only removes OUR override (inspect() guard — never clobbers a user's own bottom/hidden)

Atlasv0.0.123e3fa785b

Window tint goes FULL WORKBENCH — editor.background, tab strip (active/inactive + group headers), breadcrumbs, sideBar + auxiliaryBar (mac right part), panel/terminal background all follow the active Atlas theme (blend() helper derives darker header shades + whisper accent borders); activity-rail icons GREYED (foreground muted 45% toward bg, inactive 68% — accent reserved for the active border + badges); managed-keys cleanup mechanism unchanged so opting out or going default restores everything; documented mac caveat: native title bar needs window.titleBarStyle custom

Atlasv0.0.12279051f5c

Voidspace v2 — the black-and-white scene gets a palette: quietTubes OFF (pipes visible again), client subways electric cyan 0x35c8ff (radius 0.11, opacity 0.6), data conduits amber 0xf5b04e, component windows warm 0xffd98a (lit city at night), cache/bucket datastores subtly tinted, bloom 0.5/0.65 so neon breathes, rim light up; UI glass pure-black→cool near-black rgba(8,14,24,0.55/0.95) + faint neon hairline borders return at 0.14-0.2 (black-on-black erased panel shapes; well under the old loud 0.30), terminal veil matches

Atlasv0.0.121f5cbb258

Terminal veil universal — new --atlas-term-veil skin var (sleek black glass / classic = theme background at 0.55) painted by the panel ROOT on every theme so the background reaches the brackets and follows resizes; xterm canvas now ALWAYS transparent (paletteFor simplified, gpu param dropped). FileExplorer final color pass: breadcrumb slashes + loading/empty states → ink-dim var, rowpad var, changed-row glow drops its hardcoded black outline (root outline var governs), orphaned outline const removed

Atlasv0.0.120bfe632bf

STRUCTURE IS UNIVERSAL, COLOR IS PER-THEME — uiSkin refactored to a shared STRUCTURE base (condensed font stack, weight 300, rowpad 2px, lh 1.25, icon 0.78em, bracket 11px offset -2px, radius 0, term-fs 11.5 force + narrow mono) merged into both skins; .atlas-title understated titles now on every theme; classic themes keep their atmosphere (transparent panels, TEXT_OUTLINE readability, accent-colored ticks now at 0.9 opacity with tightened glow); sleek keeps black glass + neon blue + no borders

Atlasv0.0.119d51e61e7

React Native parser — packages/atlas/src/reactNative.ts maps mobile apps into the client city: Expo Router file-based screens (app/(tabs)/home.tsx → /home; _layout/+specials excluded) + React Navigation code-registered screens (<X.Screen name component={Y}> resolved via imports to the real file, navigator family in meta), page ids namespaced page:mobile:* (no web collisions), meta.platform=mobile; on-device storage (AsyncStorage/SecureStore/MMKV/expo-sqlite/WatermelonDB/Realm) = client water towers (store kind, reads pipes — NOT backend warehouses), device capabilities (camera/GPS/push/maps/biometrics/BLE/sensors) = externals above their screens; API calls reuse frontend.ts gate matching; monorepo-safe RN root detection; client district sign platform-aware (Next.js / React Native / web + mobile); ontology + docs updated; 11 new tests incl. temp-fixture integration (633 total)

Atlasv0.0.1182d85f6a9

InjectAi submit fix — the prompt entered the terminal but never sent (Slack remote + Quiz + Explain). Cause: 'text\r' written as one chunk; Claude Code's TUI is mid-render and swallows the trailing \r. Fix: write the text, then the Enter as a SEPARATE write 250ms later (atlas pty term.write + integrated terminal sendText(text,false) then sendText('\r',false))

Atlasv0.0.117747f29dd

Mac terminal font fix — sleek themes set --atlas-term-force=1 so the theme size (11.5) WINS over the user's terminal.integrated.fontSize (which was overriding via the userFs|| fallback → 'unchanged on Mac'); term:ready now funnels font through applySkin (single source of truth) instead of setting size directly; classic themes still respect the user size. ATLAS.md: Slack is now documented as a tool the AI has — read slack-inbox.json + reply to the phone via slack-reply.txt (incl. proactive finish-pings)

Atlasv0.0.116d4827b99

Rewrite Slack setup instructions — the old ones were wrong/incomplete (called it read-only, didn't stop users hand-building a scope-starved app, manifest lacked im:write). Now: create FROM THE MANIFEST not from scratch (explicit), correct xapp-/xoxp- order with anti-swap hints, a missing_scope fix-it note (re-apply manifest via App Manifest tab + reinstall + re-copy token), and calls out im:history as the scope that actually delivers messages

Atlasv0.0.1159674ef01

Slack reply path needs only chat:write — client caches the self-DM channel from any self-authored im event and sendToSelf uses it directly (skips conversations.open, which needed im:write); manifest gains im:write as the first-use fallback + updated description. Diagnosis for the user: their hand-built app has only chat:write+users:read, missing im:history (why self-DMs never arrived) — re-apply the full manifest

Atlasv0.0.114db365277

Slack remote-control diagnostics — 'Send test to my self-DM' button (isolates the chat:write reply path) + live 'last Slack event' readout (proves whether self-DM events arrive at all) in the setup panel; sendToSelf returns the Slack error; loud editor notifications on every onSelfCommand branch (remote off / running / no-Claude / send-failed-why incl missing_scope); onEventDebug tap reports every inbound message event's channel_type + fromSelf before any drop

Atlasv0.0.113bbe6f448

Slack token validation hardened — testTokens prefix-checks xapp-/xoxp- and tests the app token via apps.connections.open (not auth.test, which is type-agnostic and let a swapped app field pass then fail at socket open with not_allowed_token_type); clear per-field error messages. Voidspace panels: black glass instead of blue (--atlas-panel/panel-solid/header → rgba(0,0,0,…)), 25% less transparent (0.22→0.28)

Atlasv0.0.112347751df

Slack remote control (opt-in phone->Claude->phone) — self-DM ONLY trigger (pure parseSelfCommand: channel_type im + author===self + claude: prefix, everyone else's messages can never command), gated on atlas.slack.remoteControl (default off) + wizard toggle; command injected via the shared injectAi (no AI = texts back 'no Claude running'); Claude writes .atlas/slack-reply.txt, host watches + sends to self-DM (chat:write scope added to manifest, one reinstall); ATLAS.md phone-task section; loop stays 100% inside the user's own DM-to-self, nothing authored to third parties

Atlasv0.0.111a5ddec5b

Client pages lose roofs + driveways on ALL themes (user rule — they complicated the suburb): house branch is a clean flat-topped box, addDriveway removed from both house and tower branches, method deleted with a note that yard-prop encoding returns only via a deliberate design pass

Atlasv0.0.110e02d6f36

Atlas 0.0.110 fix: jumpTo missing from FileExplorer destructuring (EC2 next build caught what local tsc missed)

Atlasv0.0.1108b8f5d70

Search picks route by truth-test (listDir succeeds = folder → explorer jumpTo prop opens rooted there; else popup editor) with camera flight either way; terminal brackets translateY(-2px) to sit on the glass line and match the explorer frame height; search input muted grey bg + 0.66rem; selection card = header band (kind as atlas-title + close) with name at theme-standard 0.8rem/600, file 0.64 mono, loc 0.66, all 4 section headings atlas-title'd; global auto-hide scrollbars (transparent until container hover, slim theme-tinted thumb, no track) in uiSkinCss both skins

Atlasv0.0.109b2b5f727

Terminal frame restructure — brackets live OUTSIDE the clipping container (overflow:hidden was eating the bottom pair at the -2px offset) and an inner glass div owns clipping so the panel bg aligns exactly with the bracket line; snap gaps 1px→3px everywhere (explorer edge, selection-card/dock seam); standalone 📁 button removed — the Changes panel (now always present on the extension surface) gains a top row with a white SVG folder toggle + project-file search over the graph's file corpus using native datalist autosuggest (pick = popup editor + camera flight)

Atlasv0.0.1081a102e12

Terminal glass full-bleed (root div wears --atlas-panel to the brackets; webgl canvas transparent when a skin glass exists — no stacking; classic keeps canvas veil); FONT ROOT CAUSE — workspace config get() returns schema defaults so terminal.integrated.fontSize=14 always masqueraded as a user choice, blocking skin sizing forever: host now sends only inspect()-explicit values; sleek adds --atlas-term-font (narrow mono stack) applied when no explicit user font; EditorPopup gets the full skin treatment (panel-solid glass, brackets, header band, atlas-title, skin font/weight for chrome — code area stays mono)

Atlasv0.0.107728efe95

Terminal skin race fixed — xterm snapshots skin vars imperatively so mount could miss the injection; AtlasViewer now dispatches 'atlas-skin' after injecting + terminal re-applies on it (plus a deferred kick for the reverse race) → glass veil + --atlas-term-fs actually land. Voidspace borders REMOVED via skin vars (border-line/solid/hover/btn-border transparent; old values kept in comment) — brackets alone frame panels. Selection card width = SLACK_DOCK_W and snaps 1px above the dock (dock 160→200 tall); hamburger lives INSIDE its strip (controls vanish, ☰ + glass + brackets remain)

Atlasv0.0.106255d459d

Terminal glass on non-GPU renderers (root div wears --atlas-panel when webgl absent — the PowerShell missing-blue fix) + skin-driven terminal font size (--atlas-term-fs 11.5 sleek, user terminal.integrated.fontSize wins); voidspace glass 0.44→0.22; LearnLaunchRows = atlas-title style, Quiz→Quiz me; Changes panel + terminal snap 1px against the explorer (leftPad explorerW+1, closed-left 47); top-right controls unified into one BracketPanel menu cluster (slack/theme/improve/sound) collapsible to ☰ hamburger, persisted

Atlasv0.0.105c88b966b

Voidspace evenness pass — brackets offset onto the border line (--atlas-bracket-off); FileExplorer swaps its private bracket copy for the shared cornerBrackets + border-line var; terminal panel fully skinned (bracket size/color/glow/offset vars, hairline border, GPU veil reads --atlas-panel so it wears the same blue glass, xterm fontWeight from --atlas-weight); Changes|Tests tabs get the .atlas-title treatment; global button/select/input font-family inherit (UA stylesheet was the font mismatch); 3D city labels use the condensed face via labels.setLabelStyle when sleekUi

Atlasv0.0.1048c2950e1

Voidspace EVE polish — sharp corners (radius var 0), brackets half-size neon-blue #5ad1ff at full opacity with blue glow + borders in the exact bracket hue, darker header bands rgba(5,12,24,0.78), condensed font applied to every chrome element (buttons/select/pills) at weight 300, .atlas-title skin rule makes panel titles tiny/unbold/uppercase, roads quieted (near-void bed, white curb hairlines), datastores = ghosted bodies + white hoops/rims (scene sleekUi branch incl. selection-dim pass)

Atlasv0.0.103a006c6ed

EVE UI skin for Voidspace (theme.sleekUi → uiSkin.ts CSS vars injected per theme): blue-glass panels + darker header bands, hairline light-blue rest borders, condensed font stack, tighter rowpad/line-height, icon size decoupled from line height, grey ink with white for emphasis, subtle blue-glow brackets; classic themes keep the frameless outline look untouched. Changes|Tests become TABS with full-panel lists + collapse chevron

Atlasv0.0.10202c9c755

Terminal overhaul for Mac feel — WebGL renderer (VS Code parity; DOM+outline stays the fallback, GPU mode wears a faint theme-tinted veil since canvas glyphs can't take the CSS outline); inherits the user's terminal.integrated font settings so powerline/nerd prompts render properly (the 'solid background path' fix); macOS spawns a LOGIN shell (-l) so PATH matches VS Code; scrollback persists across Reload Window (throttled workspaceState saves, pure sanitizeForRestore strips TUI alt-screen frames, 5 tests) with a restored-session divider

Atlasv0.0.1014381b270

Voidspace theme — deep-space reading-first look (waterOpacity 0 floats the city, white edge lines on dark hulls, thin quiet tubes hidden until selection via theme.quietTubes, externals as deterministic starship fleet via theme.ships + props.buildShip, minimal bloom, near-white UI accent); Changes panel splits test files into their own collapsed TESTS section (pure testFiles.ts isTestFile/splitTests, 5 tests)

Atlasv0.0.99b1f4a66f

Slack integration — read-only Socket Mode connector (user's own app via manifest, tokens in SecretStorage, ws bundled, direct client-to-Slack, no server); 💬 button with urgent/unseen badges left of theme picker; bottom-right bracket dock feed; forced acknowledgment of DMs/@mentions (pure slackAlarm escalation: 10min popup, 2min countdown, 60s siren + red strobe every 3min until OK; atlas.slack.alarm opt-out); .atlas/slack-inbox.json for the AI; pure classify/alarm modules with 12 tests. Changes panel flush with top edge

Atlasv0.0.98871920f3

ONE design language — shared BracketPanel (glowing corner brackets, no glass, outlined text, hover border) now frames the Changes list, node detail sidebar, connection card; pills/buttons/captions/banner go transparent; ONLY close-reading surfaces keep the dark background (diff/code, exam, lecture) and the lecture deck is vertically centered

Atlasv0.0.9790093b80

Explain It | Quiz side by side (Learn dropped from the name); exam + lecture panels + state pills restyled to the terminal design language — transparent background, 4-way outlined text, glowing corner brackets, hover border

Atlasv0.0.9694875b60

Terminal lag ROOT CAUSE fixed — .atlas writes re-triggered the workspace watcher causing a perpetual full-extraction loop (WATCH_SKIP guard for .atlas/node_modules/dist/etc); ALL background scanning removed — AI presence + scope enumeration now probe only on click; git milestone polls halved. NEW: Explain It — AI-authored slide-deck lectures played over the map (Quick/Standard/In Depth, per-slide camera flights, Esc/arrow keys) + 3-tier quiz ladder (Apprentice/Engineer/Architect) with S rank at Tier III 93%+, quality rubric mandates structure-over-syntax questions

Atlasv0.0.955da54736

Fix terminal typing lag — AI-presence scan is two-phase on Windows (pid/ppid/name skeleton, command lines only for the few pids under terminal shells), overlap-proof self-pacing loop with slow-machine backoff, adaptive cadence (12s absent / 30s present) + instant re-scan on terminal open/close; wmic transient failures no longer demote to the CIM path

Atlasv0.0.94fa8e5dcc

Learn & Quiz — AI-presence-gated exam flow (process-tree detection under terminals, never auto-starts), quiz protocol over the .atlas bus (request/quiz/status/result + staff-engineer debrief), themed one-question-at-a-time exam panel with per-question camera flights + 82% fireworks, walk command teaches file locations click-by-click in the explorer; pure quiz/procScan/gitParse/walk modules with 25 new tests

Atlasv0.0.93c4243a96

Superman flight — WASD with momentum (accel tau 0.9s, coast-stop 0.16s tau), Shift boost 3x, true look-direction flight (dive on pitch-down, floor guard), FOV speed surge; focus jumps are arced flights (distance-scaled 0.8-2.2s, late-biased easing, swoop landing); synthesized wind follows speed via atlas-wind events, mute-aware

Atlasv0.0.923872f853

The scale update — FOV 52 -> 64 (perspective drama), minDistance 6 -> 1.5, maxPolarAngle 1.55 (street level, never subterranean), focus framing 15-24 -> 9-15, opening shot at half altitude; scale is camera, not geometry

Atlasv0.0.9144825d73

City blocks of four (2x2 buildings per block, roads around blocks only, doors face nearest road; 2x2 silos per block, buckets own a block; DS_BLOCK 36 / BLOCK_PITCH 40); tube manners: silo wall termination (dsRadius trim + ground-level endY), canonical-pair routing kills A/B box loops, NormalBlending flattens stack brightness; verified: no overlaps, 46 street segments, footprint held

Atlasv0.0.905fcd68f8

File explorer matches the terminal design (frameless, outlined text, 4 glowing corner brackets, header inset; back/breadcrumb/close/resize kept); CLOUD_SCALE 10 -> 5; subway pipes trunkY -5.2 -> -10.4

Atlasv0.0.8943bc9121

True MSAA in the bloom chain — EffectComposer gets an 8x multisampled HalfFloat render target (antialias:true never applied to offscreen post-processing targets); completes the AA trilogy with 0.0.87 supersampling + 0.0.88 de-stippling

Atlasv0.0.88eb314013

Kill edge z-fighting stipple — all coplanar outlines (module edges, neon node pass, slab outlines, roof edges, prop outlines) scaled 1.003 off their surfaces so the depth test resolves cleanly

Atlasv0.0.87f97c1b94

Supersample low-DPI displays (pixel ratio floor 1.6, cap 2; composer setPixelRatio matched; high-performance GPU preference) — GL 1px lines stay coherent when zoomed out

Atlasv0.0.8624fb02ae

The agent bus — AI-driveable map via .atlas/ (graph.json context + ATLAS.md instructions + commands.jsonl file bus, self-gitignored); commands: focus/highlight/select/say/open/tour/reset; scene.spotlight (gold pulses + dimmed city + lit tubes), AI caption banner, ref resolution (id/file/label/fuzzy/best-fit, pure+tested); universal — any file-writing agent, zero config

Atlasv0.0.859a1e8f69

The jenga system — packing.ts (MaxRects BSSF free-rect packing + shelf overflow + occupancy metric, pure+tested); db zone z-aligned to compute zone; secondary blocks pack into footprint voids; client city wraps to columns (capped span); cloud-district filter kills local-twin shadowing; verified numerically (host 367x611 -> 400x467, occupancy 46.5 -> 56.6 pct, zero overlaps)

Atlasv0.0.840713d851

Watch-the-AI-work camera — watcher broadened to all source-ish extensions (graph-shaping edits re-extract, others push activity cheaply at 400ms), git-poll derives focus from newly-dirty files so out-of-watcher changes still fly the camera; zoom+orbit follows every change through the best-fit chain

Atlasv0.0.83b7ed7d4c

Best-fit change navigation — changed files without exact nodes select their directory's module building, else their package platform; rows annotate the fallback target, cycle-zoom includes them

Atlasv0.0.820c83c07f

Localhost realm rotated 90 degrees (north-south column parallel to the city's west edge) and placed LAST in layout when all ground positions exist — root cause of the overlap was placement before the client city/user crowd were positioned; clearance verified numerically (38.6u)

Atlasv0.0.806aba01bb

The LOCALHOST REALM — dev machine as a white-dashed plate beside the cloud (local compose services, archetype-inherited squares, port signs); env-driven wiring roads cross the realm border and superseded cloud paths dim inactive; deploy-readiness checklist on the realm (env provenance, keys only); live docker ps status via compose working_dir labels in the extension

Atlasv0.0.7908113d3b

Atlas 0.0.79 UI pass: terminal starts minimal with 4 glowing corner brackets + slides right when explorer opens; theme picker top-right beside volume; Help Improve as quiet one-liner; explorer back button + 50% glassier + source-control glow trail (changed file + every ancestor folder in theme accent)

Atlasv0.0.785a3f1ac7

The honest question mark — thresholded unknown-mediator node (5+ orphan tables, 50%+ of schema dark, real code present) wired to orphan tables + unwired code as dashed inferred edges; card explains the inference with a quiet anonymized-report link; trust-rule doc section

Atlas57d43d9a

Atlas tests: fully generic comments in root-discovery test

Atlasv0.0.7739a7d13e

Package.json exports-map resolution (exact + wildcard subpaths, dist->src fallback) + receiver-agnostic model access matching (known model + prisma verb, any client name) — the two universal patterns from a Help Improve report; VPC/secrets wiring correctly left out (network reachability, not code data flow)

Atlasv0.0.76afb4d871

Restore extension name/description mangled by encoding bug in version bumps (package.json restored from git, bumps now via Node); Improve Atlas opens the note form IMMEDIATELY on click

Atlasv0.0.7585527bbf

Help Improve reports accept an optional user-authored note (paste your AI's diagnosis of what the map missed) — extension prompt after Send + feedback schema note field; the one non-anonymized field, consent by construction

Atlasv0.0.74d48b8cbe

Serverless.ts configs read (TS-monorepo norm) + custom-named descriptors found by content + Lambda data-trace file-level fallback for wrapper handlers (middy) — diagnosed from a user-submitted anonymized report (193 orphan datastores, 14 unmapped functions blocks, zero data edges)

Atlasfa34841c

Atlas doc: layered backends discovered at any depth + workspace-package data tracing in the public systems reference

Atlasv0.0.73852503aa

Backend layers DISCOVERED not assumed (actions/adapters/handlers/routes found at any depth with backend-sibling guard — company-nested backends map like root ones); endpoint data wiring traced through workspace packages (db-core-style imports -> inferred reads/writes; 5 CommsLink ads/users endpoints un-orphaned); cities always get street grids even with unreadable data layers

Atlasv0.0.726e0d4d08

Cloud deck doubled (320/256 — only true monoliths pierce it), whole puffball clouds clickable (every puff selects the external), cloud tether lines invisible at rest — shown only when the cloud or its consumer is selected; invisible lines excluded from edge picking

← NewerPage 1 of 24Older →

Generated 2026-07-16 from git across all CommsLink repos · page 1/24, showing 1100 of 2,356 ships · complete record: /changelog.txt · /changelog.json.