Skip to content

Luban OS: one tray, the host's pointer and keyboard, xdesk arrangements, versions made visible, quick start; release 2026.10.19.2 - #682

Merged
Sunrisepeak merged 53 commits into
mainfrom
feat/luban-one-app
Oct 19, 2026
Merged

Sunrisepeak merged 53 commits into
mainfrom
feat/luban-one-app

Conversation

@speak-agent

@speak-agent speak-agent commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Implements .agents/docs/2026-10-19-luban-os-one-app-versions-and-quick-start-design.md (the design's §25 task IDs are in each commit message). Release 2026.10.19.2, interface protocol 1.14: 2026.10.19.1 shipped first with #684's network diagnostics, so this release is one later.

  • One tray per home (X22): windows register with it, report their jobs and are raised through its socket. Closing a window keeps a running job; Quit asks once for every window. Windows starts it detached too.
  • The host's pointer and keyboard (X15, X16, X19, X23): opensal 0.3 (Cursor, CursorImage, PointerLock). xdesk sends its pointer shapes and the window draws them from the Luban cursor theme. The window holds the keyboard; Ctrl+Alt+K lets it go; the Host key opens the menu.
  • xdesk (X16–X18): space × arrangement per workspace (tile, stack, canvas; Super+m), groups on the canvas, drags that preview where they land, the maximize button's layouts, a key table (keys.json), state and rules, chooser/switcher/sheet/menu overlays, and the xdesk profile and session.
  • Versions made visible (X3, X5, X10–X13): recipes' extensions/status/archs over the interface (feature package_extensions); a domain's routed commands answer in events (domain_relayed); no silent fallback to an installed edition (installed_only); rollback --to relayout.
  • The quick start (X24): six stages, the tier meter, offers read before capabilities, searches in parallel.
  • The network line and the host's proxy in a machine (X32); luban's words in the i18n domain luban (X12); the craftsman icon (X25).
  • Latency budgets measured on CI, alone on the machine (X26); offline making and entering (X26, X28); Quick Start docs in two, command line first (X27).
  • Compat (X20, luban/os/compat): an xdesk of 2026.10.19.1 or before gets the host's arrow; Luban OS windows of 2026.10.19.1 or before are named, to be quit from their own tray icon.

Companion: openxlings/xim-pkgindex#1001 (luban:cursors, procps-ng, core/agent-workspace/desktop 2026.10.19.1, yazi aarch64, the arch read where install() runs).

Co-authored-by: speak-agent 248744407+speak-agent@users.noreply.github.com

Sunrisepeak and others added 15 commits October 19, 2026 08:52
…ents, versions, quick start (2026-10-19)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… five on one cell are the line's three and the word's two (F12)

The test double-clicked a cell and then triple-clicked the same one: on a
quick machine the five clicks are one run (the third selects the line and
starts over, the fifth is a word again), on a slow one two. The product
counts as xterm does; the test assumed a pause. The line is now three clicks
on another cell of the line, and five quick clicks on one cell are asserted
to be the word.

Design 2026-10-19 §14 (X1).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…check no longer reports it (F10)

tiny's luban status --check said busybox did not start: BusyBox called by the
name of an applet it was not built with answers "applet not found" with exit
127, which the probe read as a loader failure. That answer means it ran.
root_check::started() is the decision, exported and unit-tested.

Design 2026-10-19 §14 (X2).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ce, answers in events -- luban history of a domain's system (F13)

run_domain_operation_ ran the routed command in the domain as a plain
command: its data and errors were text on an inherited stdout, and a caller
reading NDJSON (luban, the window) saw nothing -- `luban history desktop-3`
printed nothing for a system of 41 generations, exit 0. With nobody at a
terminal it now takes run_domain_relayed_, the one relayed path `subos new`
already used; the commands that hand the terminal to a program (exec, use,
start, log) keep it. luban's history says when the answer has no list
("could not read" is never "none").

tests/requirements.toml declares the design's requirement IDs (planned until
their commits land); SUBOS-DOMAIN-RELAYED is required with this one.

Design 2026-10-19 §12.4 (X3).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e prompt mark (F23-F28)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…r's read-only commands make and say nothing; luban run's output is the program's

- subos new --from without a version: when the index cannot be read it stops
  ("xlings update, or name a version"); when the index has no such package
  and one is installed, that one is used and said (data installed_only, the
  shape of passed_over; luban passes it on). Each said once though a rootfs
  resolves its base twice.
- Inside a Luban system, a user with no ~/.xlings yet: a read-only command
  (home::is_read_only_command, told to Config by main before first use) reads
  the system's home -- no ~/.xlings made, no notice. The first write says once
  where it installs and how to install for every user: from the host,
  luban run <system> --user root -- xlings install --system <pkg>; no sudo.
- Running a program in a system (luban run, subos exec) says the injected
  variables' count only with -v; a variable that could not be set is said
  either way. subos use --shell keeps its report.

Design 2026-10-19 §9.2, §19 (X5; F4, F18, F21).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…wo units, module names unchanged

modules/home (xlings.home.format) and modules/store (xlings.store) were each
one file under 200 lines, both about what a home is: its layout and what is
kept in it. They are one package now (design 2026-10-19 §21: a package is a
responsibility with weight, not a file). Module names and imports are
unchanged; modules/subos depends on home for xlings.store. Only moved.

Design 2026-10-19 §21 (X6).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…y moved

5335 lines flat in one directory, and the tray process, the pointer, the
keyboard and the catalogue are about to arrive (design 2026-10-19 §21): the
views (launcher, management, system views, console, display), the art and
the test script move into their own directories; the app's core stays at the
top. Only moved.

Design 2026-10-19 §21 (X7).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…package of its own -- only moved

- xdesk.compositor's server.cpp (1294 lines, one structure) is a partition
  (:server, internal) declaring the session's state, and units defining it by
  area: server (start, loop, provider), windows, input, text (input method,
  clipboard), output (size, density, fonts, frames), desktop (title bars,
  panel, launcher, programs). Options moves to an exported partition
  (:options) the server's parts can see; the public interface is unchanged.
- xdesk.layout moves from xdesk-base to a new kit, xdesk-layout: pure logic,
  about to grow (spaces x arrangements, drag targets, rules), used by the
  compositor and the unit tests. Module names unchanged.

The xdesk e2e tests and test_xdesk_layout pass unchanged. Design 2026-10-19
§21 (X8).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…, search; libxpkg 0.0.66

- libxpkg 0.0.66 (extensions kept as JSON text). Across the recipe boundary
  a package now carries its status, type, extensions and the loader's
  warnings: before, a recipe read in the worker came back "dev" with no type.
- package_info's package and search_packages' packages[] carry `status`,
  `extensions` (the recipe's, an object keyed by namespace) and
  `passed_over`; `xlings info -v` names the namespaces and what the loader
  dropped.
- The handshake's features add package_extensions, domain_relayed and
  installed_only; the protocol version stays 1.12 (additive).
- Specs: xpkg-manifest-v1 §3.1 (extensions: rules, registry, the luban
  namespace), interface-ndjson-v1 §7.6, §7.7, §10.1; the authoring guide.

Design 2026-10-19 §8 (X10).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… by domain, registered in main

modules/i18n holds the mechanism every program shares (design 2026-10-19 §7):
tr/trf, the language (an override variable, the setting, the system) with a
BCP 47 fallback chain (xlings.i18n:locale), catalogues registered by domain,
check() of a domain's catalogues, pick() for words that come with data, and a
glossary of terms written in English. The module name is unchanged; its 29
importers did not change.

modules/ui keeps xlings' words and registers them as the domain "xlings"
(xlings.ui.i18n), first thing in xlings' main -- nothing depends on the order
static objects start. The check found zh's panel headings keyed by their
English text; that convention (such a key is its own English) is now written
down and checked rather than accidental.

Behaviour unchanged (xlings --help in en and zh as before). Design 2026-10-19
§7, §21 (X9).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ied without waiting

- xlings.platform:local_socket: LocalListener and LocalStream, a byte stream
  between one user's processes addressed by a path -- AF_UNIX on Linux and
  macOS, and on Windows 10 1803 and later (where unix_*_stream were -1) --
  owner-only, non-inheritable, non-blocking, with wait_readable() over
  several. A listener replaces a socket file a crashed one left, removes its
  own when closed, and says when a path is too long for the address.
- FileLock::try_acquire: the lock now or not at all; held by another is not
  an error. A process is alive while it holds its lock (no pid).

What the Luban OS tray and its windows speak over. Tests run on the three
platforms' runners. Design 2026-10-19 §3.2, §3.7 (X11).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ointerLock ('l'), every shape named (0.3); opencaps registry

opensal 0.3 (design 2026-10-19 §15):
- Who draws the pointer, written down: a consumer that wants Cursor draws no
  pointer into its frames; it names the shape ('c') or, with CursorImage
  (new), sends one ('C': at most 256x256, its hotspot), and the provider draws
  it with its own system's pointer -- a moving pointer costs no frame.
  Exactly one pointer is shown.
- PointerLock (new): 'l' 1/0 holds the pointer; relative motion comes back
  as the PointerRelative event; the provider releases it on its own chord.
- kCursors: the 16 names the Luban theme draws (grabbing, the diagonal
  resizes, crosshair, wait, progress, not-allowed, help added).
A side skips what it does not know (§6.3): older peers are unaffected.

opencaps: each registered level may name the package that brings it to a
system (desktop-cursor: luban:cursors); app-capabilities 1 and tray-protocol 1
registered.

Design 2026-10-19 §10, §15 (X15).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…, in one package, with when it goes

luban.compat (design 2026-10-19 §15.3) holds each judgement Luban keeps only
for an older release, with the version it serves, the version it came in and
the condition for removing it:
- :editions -- frozen subos:luban-* names and their luban: successors; the
  service, the luban command and the app now ask it instead of matching the
  prefix in eight places.
- :pointer -- an xdesk of 2026.10.18.1 or before asks for no Cursor and draws
  no pointer: the host shows its own arrow (used by the host in X23).
- :processes -- Luban OS windows of 2026.10.18.1 or before register nowhere:
  found among the user's processes (platform::own_processes, Linux; macOS and
  Windows say they could not look), never ended.

tools/lint_compat.sh (in the lint suite): outside luban/os/compat, luban/ and
apps/ name no frozen edition and write no released version into code. The
compatibility spec (§3.1) and the package README list the entries; a test per
entry pins the old behaviour and that both lists have it. luban's help names
`--from luban:<edition>` as new's xlings equivalent.

Design 2026-10-19 §15.3, §21 (X20).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 14 commits October 19, 2026 09:29
… the lease's name servers in /run, the system's name (F23)

A Linux machine (qemu, NAT) had no network unless the system's own init
brought it up: the kernel line had no ip= (the Mac's vz path has), and an
edition's rcS ran udhcpc in the background, giving up after three tries and
writing /etc/resolv.conf into the system's tree. GitHub and GitCode both
failed inside desktop-4 while a sandbox on the same host worked.

- The kernel takes the lease and sets the name: `ip=::::<name>::dhcp` when
  the machine has a NIC (not for --net none).
- The guest init puts the lease's name servers (/proc/net/pnp) in this
  boot's /run/luban/resolv.conf and binds it over /etc/resolv.conf: never
  written into the tree; a link there is left alone and said.
- luban_image_test (distro lane, qemu): the machine's hostname is the
  system's and it has a name server from its lease, nothing written into its
  tree. Requirement IDs for §27 declared.

Design 2026-10-19 §27.2 (X31).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…luban.fish (F26)

Since 2026.10.18.1 a system's login shell is the best it has, fish when it
has fish, and fish reads no PS1: the mark that says where you are
(profile.d/luban.sh) vanished from aabb's `root@aabb ~#`. The same mark and
colours now wrap fish's prompt from etc/fish/conf.d/luban.fish. Both scripts
are machine state, written when missing -- at a generation, and now also when
a sandbox is entered and a machine boots, so a system made before gets it
without an upgrade.

Design 2026-10-19 §27.6 (X35).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…through an app that answers (F8)

- `luban-os __capabilities --json`: version, provides (the root layout and
  manifest it reads, host-gpu, app-capabilities), needs -- answered before
  the app reads the home or opens a display (SSH, CI).
- luban asks it (service::app_capabilities: five seconds at most, kept by
  the app file's path and time in <home>/run/luban-os/capabilities.json)
  before every window it opens -- `luban run/enter --display window`, a
  machine's window -- and checks both ways: the app provides what the system
  needs, this luban provides what the app needs (service::window_app). An app
  that cannot be asked is not taken as compatible: refused with
  `xlings update luban-os`. The question ends in `--version`, so an app of
  2026.10.18.1 prints its version and stops instead of opening a window.

Design 2026-10-19 §10.2, §10.3 (X21).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… a pipe keeps what it printed

The relay of F13 keyed on "nobody can be asked", which is also true of a
pipe: `subos config <n> --json`, read by luban's Port::json from a pipe, came
back as events the pipe never sees, so a machine of a domain's system read no
policy and started with NAT instead of only its proxy (luban_image_test,
distro lane). EventStream::structured() now says a program reads the events
(set by `xlings interface`), and only then is a routed command relayed. The
domain test asserts the pipe still gets its JSON.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… preparing its home does, and an archive is imported offline (F14)

- The private domain's index is the owner's as it is now: copied the first
  time (as before) and again whenever an index's version marker differs, so
  the version luban chose on the host is the one resolved there -- not a
  snapshot from the first system ever made.
- Preparing a system's own home (`self init` in its domain) says each step
  as progress (`prepare`) and, while quiet, "still preparing ... (25 s)"
  every ten seconds: `luban new` stood on "resolve" with an empty log.
- `luban export x.luban` carries what the system runs on -- every payload
  its generation links into, the packages its templates declared, the
  editions it was made from -- and the home's index snapshot (a local index
  as its content, no .git). Additive: an older luban skips them.
- `luban import` unpacks them and makes the system with
  `subos new --offline-from <dir>`: xlings places the payloads and indexes
  where the system is made (its domain, or this home) before anything is
  fetched. Offline test: export, remove every payload, index and source,
  import under `unshare -rn`.

Design 2026-10-19 §9.3, §4.4 (X4).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…lder was a link into the read-only factory (F27)

luban_image_test's new check found it on both architectures: inside machine
`t`, `hostname` said `luban`. A system's /etc links the factory's files
(usr/share/factory/etc), hostname among them, so the guest init's write of
the system's name went through a link into the read-only generation and
failed silently; the edition's rcS then set the name from that placeholder.
The guest now replaces the link with the system's own /etc/hostname (machine
state) and says when it cannot. Also: app.cpp's file-time stamp builds on
macOS (std::to_string of the clock's count was ambiguous there).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… once, and does not take a second copy of what the system has (F25)

Inside a Luban system a user's first write made an empty ~/.xlings that
fetched every index from the network (302 s here; offline, the same failure
five times), though the system's /xlings has an index and a mirror.
- The first write starts the user's home from the system's: its index
  snapshot (the default, its sub-indexes, every named index) and the settings
  that say where packages come from (mirror, lang, index_repos,
  resource_servers). Nothing that is there is replaced.
- At a terminal it asks once ("install for you only, into ~/.xlings? The
  system's packages stay available [Y/n]"); -y does not ask; agent mode
  without -y refuses with the exact command plus -y.
- `xlings install X` for what the system has at that version says
  "X@v is installed for every user already (the system's)" and installs
  nothing; a partial overlap borrows the system's payloads as before.

Design 2026-10-19 §27.5 (X34).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… git bootstrapped to clone with (F25)

Offline, `xlings install nvim` in a fresh home printed the same failure five
times over minutes: the pointer failed, the git fallback found no git, a
child xlings was started to install git, which needed the index, which
needed git... A connection failure reaching the index pointer is now
remembered for the process and the xlings it starts (XLINGS_NET_UNREACHABLE):
no remote clone, no git bootstrap, no second sync, and one error -- "the
package index could not be fetched: no network (...)" -- whose next step in a
Luban system is the host's `luban status <name> --check`. In a second, not
minutes.

The self-check has a non-critical `network` item: a default route and a
name server, so "could not be fetched" inside a machine has an answer.

Design 2026-10-19 §27.4 (X33).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… luban/apps, one module one src

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…only, one module one src, os/window; only moved

- luban/xdesk/{base,layout,compositor,app}: the xdesk desktop as one
  project, its program from the top-level apps/xdesk (it runs inside a
  system, never on the host). Checked like a kit: never xlings or Luban.
- luban/kits: what is reusable and knows nothing of Luban (opensal-wlr,
  openhal-host, imkit, tray).
- luban/apps/: programs that run inside a system and are not projects of
  their own -- the rule written, the directory made with its first member;
  the top-level apps/ is the host's (luban, luban-os, gui, xdev).
- A package with one module keeps its files in src/ (xdesk/layout,
  os/system); several modules, a directory each.
- luban/os/desktop -> luban/os/window: the Luban OS app's window (SDL3,
  Dear ImGui), not a desktop.
Package and module names are unchanged: no import changed. The lints, the
xdesk release script, luban/README.md, the architecture docs (en, zh) and
AGENTS.md follow; design 2026-10-19 §28 (X36).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… luban status, and the version shown is the version made

- `luban search [<keyword>] [--distributions | --desktops] [--json] [-v]`:
  what the index offers, grouped as the Luban OS quick start groups it, from
  the same service function (quick_start_offers): version, source (official,
  community, local), status, tier (desktops by tier, the unrated last), GPU
  note, summary in the person's language, whether it can be made here; -v
  names what of a recipe's extensions.luban was out of range and ignored.
  Offers now carry all of it (Offer::{version, status, source, tier, gpu,
  title, summary, highlights, size, available, ignored}); xlings' search
  results add archs and keywords.
- `luban ls [<pattern>]`: by name, a part of it or its letters in order;
  without one, the output and --json as before.
- `luban status`: `versions  xlings · luban · luban-os · index`, and each
  disagreement with what to do (an app that cannot say what it can do, an
  older Luban OS still running with an icon of its own, luban and xlings
  apart); --json has versions.{..., running, mismatches[].next}
  (service::versions, which the app's About reads too).
- What `luban new` shows is what it makes: the plan's version is named to
  xlings, not resolved again; why it is not the newest comes from the plan.

Design 2026-10-19 §6, §9.1, §11 (X12).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…hared mechanism, no tr(en, zh)

The Luban OS app wrote English and Chinese side by side at 214 call sites
(and in the edition, grant, stage, close and menu tables) and decided the
language itself. Its words are now the domain `luban.os` of xlings.i18n:
apps/luban-os/src/i18n/{en,zh}.cpp (227 words; English complete, Chinese
what it translates), registered first thing in run() with LUBAN_OS_LANG as
the override; tr(key) everywhere; kEditions holds keys. A glossary names the
terms written in English in every language (Compositor, Wayland, GPU, xdesk,
labwc, LXQt, KDE Plasma, T1-T4) with their explanations, for the quick start's
hover. tools/lint_i18n.sh (lint suite): every key used is in English, Chinese
names no other key and takes the same arguments, no tr(en, zh) comes back.

Behaviour unchanged: the luban-os e2e suite (layouts at three sizes in both
languages, visual key frames) passes as before. Design 2026-10-19 §7 (X14).

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…m the app's own grid (X25)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… named, luban rollback --to relayout, notes in luban status (X13)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sunrisepeak and others added 24 commits October 19, 2026 11:43
…, level, struck -- and the app's icon is him, made from the same grid (X25)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ace, switched reversibly by Super+m, columns that split, tiled groups on the canvas; the pointer's shape goes to the host; a configured terminal gets its title and id (X16)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… to draw -- its images as 'C', frames without it (X19)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…s from one; a Windows socket file is looked for in its directory

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…om the Luban theme, its images, an old xdesk's arrow; Ctrl+Alt+K holds the keyboard and lets it go; the title is Luban OS (<system>) (X23)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ee a partition's import)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…_start.cpp); only moved

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…e traditional desktops by what they bring, more systems -- with source, status, tier and version on each card, its panel scrolling with Create in view, six stages; an index that cannot be read is said (X24)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ban-os __tray holds the icon, windows reach it over tray.sock, liveness is a lock; the layout baselines of the pages that moved, recorded again (X22)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…of it, Super+Tab the window, Super+/ shows the keys; keys.json, state.json and the xdesk session keep what the person set; a window's menu with always on top, every workspace and the app's rules (X18)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…2mcpp asks for it)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…n a copy of the layout -- with sizes offered when it rests, gaps that resize, and the maximize button's layouts (X17)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…AT's gateway, in /run/luban/network.env for its init and login shells -- and luban status and the banner say the network in one line (X32)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… output (ls, search, status, the notes), registered by luban and Luban OS, linted (X12)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… raise, the quick start, its index, the tray's start, luban search; the quick start's index read first and in parallel; making a system and entering one with no network (X26)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… version -- not 'could not be read' (the luban-wsl2 lane)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…mmand line first; the quick start, the desktop (four groups, the keyboard and pointer, the tray, xdesk's arrangements, keys, drags, menus, rules), environments (two ways to upgrade, the network line, offline, a user's own packages), the app's processes; generated references (X27)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… system entered with no network (X28)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…elayed, installed_only)

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…ay reads what runs as often as it is cheap and writes tray.json only when it changes; a click with Super is not Super alone

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…its interface 1.14; the pointer and tray compat cover 2026.10.19.1 and before

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
…n one header -- each under 2k lines

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
… (cpu), not under the other tests' load

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
@speak-agent speak-agent changed the title Luban OS: one tray, the host's pointer and keyboard, xdesk arrangements, versions made visible, quick start; release 2026.10.19.1 Luban OS: one tray, the host's pointer and keyboard, xdesk arrangements, versions made visible, quick start; release 2026.10.19.2 Oct 19, 2026
@speak-agent
speak-agent marked this pull request as ready for review October 19, 2026 09:23
@Sunrisepeak
Sunrisepeak merged commit 87b8f24 into main Oct 19, 2026
54 checks passed
Sunrisepeak added a commit to openxlings/xim-pkgindex that referenced this pull request Oct 19, 2026
…desktop/agent-workspace 2026.10.19.1, xlings 2026.10.19.2 (#1001)

The index side of openxlings/xlings#682 (design `.agents/docs/2026-10-19-luban-os-one-app-versions-and-quick-start-design.md` in xlings; tasks R1–R10). xlings 2026.10.19.2 is released and mirrored.

- R1 `luban:cursors`: the Luban pointer theme, pixel art from `tools/res/cursors/luban.cursors` (Xcursor 24/48/72 px, the default theme, PNGs and `cursors.json` for the host); Apache-2.0. Dependencies: `luban:labwc`, `luban:xdesk` (revision bumps), and `luban:luban-os`, whose window draws the desktop's pointer from it from 2026.10.19.2.
- R2 `xim:procps-ng` 4.0.5: static ps/top/free/pgrep/pkill/pidof/uptime/vmstat/watch on both architectures.
- R3 `xim:yazi` 26.5.6: upstream's linux aarch64 build. Revision 1, because aarch64 had been given the x86_64 build.
- R5 core 2026.10.19.1: cmake, xmake (x86_64), yazi, procps-ng.
- R6 desktop 2026.10.19.1: xdesk 2026.10.19.2 in its `xdesk` session, with the Luban pointer theme in place of Adwaita's. agent-workspace 2026.10.19.1 is on the new core, and `luban:xdesk` gets 2026.10.19.2.
- Recipes' `extensions` (cards, titles, tiers) for the desktops and editions.
- The arch where `install()` runs: `luban.arch()` (`_RUNTIME`, then uname) for core and desktop. Read alone, `os.arch` sent aarch64 down the x86_64 path.
- R9 xlings, luban, luban-os and xdesk move to 2026.10.19.2 as latest. The new editions are added to the published-output fixture.
- A branch push's dep-namespace check is measured against main.

Resources were built by res-build, published to xlings-res (GitHub) and mirrored to GitCode, then checked by content.

Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants