Repository navigation
Conversation
A child that exited before SPAWN stored its handle left no WAIT replay, and the Exit handler removed the route before recording the replay. A WAIT in either window found neither and answered NotFound, which is how uplink_cli_remote_execution_and_authentication failed in CI on `yas run sh -c 'exit 7'`. The handle store and the exit record now serialize on the replay table, the route retires after its replay is recorded, and WAIT checks the replay again when the route is gone.
AbstractUnixSocketTransport length-prefixed every send, including the 8-byte preface, and left yasFraming unset, so YasConnection used message framing and the server closed the link on the bad preface. The Node, Bun and Deno Unix socket transports never reached HELLO. The socket is a byte stream: the raw preface followed by u32 length-prefixed frames. Declare yasFraming = "stream" and pass bytes through unchanged in both directions, as the WebTransport, WebRTC and Relay transports do; YasConnection owns the framing. Bun's socket.write accepts only what fits in the kernel buffer and drops the rest, which corrupts a byte stream on large writes. Queue the remainder and flush it on drain.
tsc with moduleResolution "bundler" emitted relative imports exactly as written, without extensions, so importing the published @yas-run/core or @yas-run/react dist from Node ESM failed with ERR_MODULE_NOT_FOUND. Write explicit .js (or /index.js) extensions on every relative import and compile with module/moduleResolution NodeNext, so tsc rejects an extensionless relative import instead of shipping it. Solid's Vite build already rewrote its JS; its emitted .d.ts now resolve under NodeNext too.
The Nix build's local @yas-run/browser package has no "type": "module", so under NodeNext its default export types as the module namespace and tsc rejects init() as not callable. Using the default export from the dynamic import types the same way in both layouts.
@yas-run/core declared a peer on @yas-run/browser >=0.9.0, but the browser package is versioned with each YAS release (0.3.0 today), so a plain npm install failed with ERESOLVE. Use ^0.3.0 and have prepare-release stamp ^<version> alongside the package versions. The browser package is built from crates/browser outside the pnpm workspace, so workspace:* cannot do this at publish. Document the install and wait for the workspace to be ready before creating a session in the Node example; createSession throws until the Terminal family is negotiated.
YasSurfaceCanvas and both views default touchMode to "direct"; the view prop comments claimed pointer emulation.
`yas remote add` writes the home server's `remotes` KV key, but `--on NAME`, YAS_TARGET and `yas.target` were looked up in the legacy yas.remotes file, so a freshly added remote was an unknown target and `yas remote set-default NAME` broke every command. Bare names now resolve against the home server (YAS_SOCK, else the default local instance), following name-to-name entries with cycle detection and refusing disabled entries. `yas remote` verbs without --on also edit the home server rather than the default target, so `toggle` after `set-default` reaches the catalogue that defines the name. Help text and docs describe the catalogue instead of the file.
read_remotes_full wrote `local = local` to a missing yas.remotes, so a lookup created a file. A missing file now reads as an empty list.
A SEQUENCE cursor beyond the terminal's output produced an OutputResult whose start lay after its next cursor. Encoding rejected it and the server answered Internal, so `yas terminal history ID --since SEQ` with a future cursor failed. seq_text now clamps such a cursor to the end and returns no text.
The CLI capped the collected OUTPUT reply at the requested text size, but the reply is an encoded OutputResult with 36 bytes of fixed fields ahead of the text. The cursor probe asks for 1 byte of text, so every probe failed with "query returned 36 bytes; collection limit is 1". That broke `yas terminal wait --pattern` and `yas terminal history --since now` outright, and a full-size `output`/`history` page could trip the same check. The collection limit now adds the framing. With the probe working, `wait --pattern` again takes the cursor before reading and matches only output produced after the wait began.
A command wait that expired before any command it could report on had started answered NOT_FOUND, so `output --wait` without an index exited 1 with a NotFound error instead of the documented 124. The server now answers TIMEOUT in that case (NOT_FOUND stays for an exited terminal or an evicted index), and the CLI maps it to exit 124 with a "timed out" message. A command that is still running at the deadline also prints a timeout note alongside the existing 124. The index-less wait keeps waiting for the running command, or for the next one to start when none is running, so `send` followed by `output --wait` cannot race to the previous command's result. The help, learn.md, and design docs now say so. Adds a server test covering this and the past-end OUTPUT cursor.
`yas terminal start --wait CMD | head -1` panicked with "failed printing to stdout: Broken pipe" once head exited, because the terminal commands printed with println!. They now write through a helper that treats EPIPE as success, so the command finishes normally and exits with its own status (the command's exit code for `start --wait`). Other stdout errors are reported on stderr.
WRITE is a fire-and-forget event, so sending to an exited terminal (or a nonexistent id) silently did nothing and exited 0. The CLI now looks the terminal up first and fails with a clear error and exit 1 when it does not exist or has exited, pointing at `yas terminal restart`.
Restart: the replayable launch record lived in a per-connection map, so RESTART with REPLAY only worked on the connection that created the terminal. Every CLI command opens a new connection, so `yas terminal restart` always answered Unsupported. The launch record now lives on the terminal itself and is replaced by a successful REPLACE restart. Environment: --export-sock / YAS_EXPORT_SOCK and --inject-path / YAS_INJECT_PATH only applied to the Derived environment base, which native launches never use. They now apply to the Server base as well. A Server-base terminal also no longer inherits a YAS_SOCK that names a different server (for example when the server was started from a shell inside another YAS server); an inherited YAS_SOCK equal to this server's own socket is kept, and --export-sock always sets it. Missing program: a CREATE whose argv program is not on the child's PATH answered ResourceExhausted, and a RESTART with one answered Io. Both now answer NotFound, and `yas terminal start` prints "PROGRAM: command not found".
… them follow_until_terminal returned as soon as a snapshot showed the definition stopped, skipping any attempt it had not followed yet. A short attempt that started and finished between two snapshots printed nothing. Follow every new attempt before honoring a terminal phase; FOLLOW replays retained output for a stopped attempt. Human output now also names a trapped or failed attempt and its detail on stderr, and a DEPLOY conflict on a name still held by another definition says which one and what to do, instead of 'Conflict: no detail'.
It only accepts https:// or loopback http:// URLs, never a directory.
yas clipboard set offers text/plain;charset=utf-8, but get asks for exactly text/plain by default, so set-then-get failed with NotFound. Get now resolves a plain-text request (text/plain with or without a charset, or UTF8_STRING) to whichever plain-text type the owner offered.
- capture --scale now resizes the surface with the RESIZE scale extension before capturing instead of being rejected. - capture --quality is removed: Surface CAPTURE has no quality input. - record --codec h264-444/av1-444 announce 4:4:4 through the view color capabilities extension instead of being rejected. - record help names the real default files (.h264, or .obu for AV1). - surface scroll accepts a negative amount, as learn.md shows.
- YAS_AUDIO=0 only kept PipeWire from starting when media input and portals were also off. With either on, the runtime started and desktop audio was still offered and streamed. The output device is now unavailable and OPEN_OUTPUT is refused under YAS_AUDIO=0 regardless of why PipeWire runs. - A viewer at "Desktop default" (0 kbps) reset the encoder to a built-in 64 kbps, overriding YAS_AUDIO_BITRATE. The configured bitrate is now what a server-default viewer, the last unsubscribe, and a pipeline restart use. - When audio cannot start and was not disabled, print one line naming the reason at normal verbosity; -v keeps the detailed lines.
Ctrl+B r only toggles the preview panel, and Tab/Shift+Tab cycle panes, as the prefix map already says. Drop the two unused strings.
yas open always serves the local server's UI, which lists configured remotes; a command-line target was silently dropped. Credentials in the echoed --on value are masked.
The server dropped DISCONNECT's reason and sent GOAWAY with empty detail, so a kicked CLI printed 'YAS server is closing with Ok: no detail'. The reason now travels in GOAWAY detail as the new optional Core extension GOAWAY_REASON_EXTENSION (1), and the CLI prints 'disconnected by the YAS server: REASON'.
run_git_watch opened every subscription with an empty snapshot and only delivered repository state as a later Reset. One-shot `yas git status` printed that empty snapshot, so it always said clean. The first native snapshot now is the initial snapshot.
A PATCH_TEXT answer needs a content object and neither INDEX nor WORKTREE names one, so `yas git diff -p` failed with Unsupported. Use the null object ID for patches between two mutable endpoints.
`yas git show REV` sent a BLOB query for the commit and failed with Invalid. It now prints the commit in `git cat-file commit` layout (from the LOG record), and lists a directory for REV:DIR and REV:. --repo and `git discover PATH` were sent verbatim, so relative paths (including the default `.`) resolved against the server's cwd. They now resolve against the client's cwd, like fs and lsp --root.
|
Warning This organization's free trial has ended, so Indent couldn't start this review. Manage billing to resume reviews on this repository. |
pcarrier
force-pushed
the
main
branch
2 times, most recently
from
October 8, 2026 02:54
d3cddfa to
9d19cd5
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #43. Review only the top commit, "cli: git show without a path, and client-relative --repo".
yas git show REVnow prints the commit object instead of failing with Invalid.REV:DIRlists the tree.--repoandgit discover PATHnow resolve relative paths against the client's cwd.The fork PR with the isolated diff is indent-com#26.
Tag
@indentto continue the conversation here.