Repository navigation
Releases: greaber/syq
Release list
syq 0.7.1
syq 0.7.1
This patch strengthens single-part S3 upload integrity and exercises the faster
release pipeline introduced since 0.7.0.
Single-part uploads with a SHA-256 request checksum now reuse that digest for
signed payload validation, including delegated uploads. Providers such as
Tigris can reject corrupted payloads through this check without an additional
hashing pass. Multipart and MD5-based uploads retain their existing behavior.
There are no CLI or saved-state changes.
Release preparation reuses eligible validation and Cargo caches, overlaps
native builds with validation, and packages Python wheels from the verified
native executables while SDK checks run. Publication retains its validation,
signing and artifact-verification gates.
What's Changed
- Reuse Cargo caches across version bumps by @greaber in #510
- Reuse release tests when preparation leaves tested inputs unchanged by @greaber in #511
- Separate mapping-stream test outputs from the tuning cache by @greaber in #514
- Start release builds alongside validation and reuse exact-commit artifacts by @greaber in #513
- Prepare Python SDK 0.7.0 by @github-actions[bot] in #515
- Reuse upload SHA256 for S3 payload validation by @greaber in #517
- Avoid rebuilding Rust during Python release preparation by @greaber in #516
- Reuse verified native release binaries in Python wheels by @greaber in #518
- Use Namespace by default for macOS and add Linux runner trials by @greaber in #512
- Fix stale downward-tuning expectation in live recovery test by @greaber in #519
- Build Python release distributions alongside SDK validation by @greaber in #520
- Use Namespace by default for Linux Rust validation by @greaber in #522
- Fix macOS CI Python tooling installation by @greaber in #523
- Cancel superseded CI jobs with matching test scope by @greaber in #521
- Make focused runner checks easy to dispatch and monitor by @greaber in #524
- Select affected post-merge checks and run full validation nightly by @greaber in #525
- Parallelize SDK checks and remove duplicate package builds by @greaber in #526
- Fix release tooling expectations for scheduled CI by @greaber in #527
- Prepare syq 0.7.1 by @greaber in #528
Full Changelog: v0.7.0...v0.7.1
syq 0.7.0
syq 0.7.0
Changes since 0.6.0. This release adds S3-compatible storage, byte streams and
callback mappings, and new controls for receiving and automatic tuning.
Upgrade notes
- Native
--connections/-jand--tuning-optionsare replaced by
--performance-tuning, for exampleworkers=4. Native--bwlimitbecomes
--resource-limits bandwidth=RATE. Resource limits can also cap automatic
concurrency. S3 uses separates3-requests,s3-objects, and
s3-parts-per-objectcounts;workersis filesystem-only.
The corresponding Python keywords changed too. Insyq rsync, standard
--bwlimitremains, while--syq-connectionsbecomes
--performance-tuning workers=N. --verify-onlyand--syq-verify-onlyare removed. Use--dry-run --hash
(rsync:--dry-run --checksum) to compare contents without copying.
Differences are planned changes, not a failing exit status; scripts that
need to detect differences must inspect the results.--progress-jsonand--syq-progress-jsonare removed. Native--results
includes progress and final outcomes, with optional rate and ETA estimates.
Automation uses schema 2, or schema 3 for stream mappings; schema-1 consumers
must be updated. Use the matching Python SDK with the new executable.- Native
cp --min-size,--max-size, and the--viaauthorization alias
are removed. Filter mapping entries to select sizes, and use
--auth-from @NAMEfor authorization. Native--only-existingand
--skip-newerare hidden experimental options that warn when used;
rsync's standard--existingand--updateremain available. - Extra payload integrity checks are now opt-in with
--integrity-checking transfer=blake3, independently of encryption.
Transport authentication, content comparison, resume checks, and required
storage-provider checks remain active when needed. Mapping entries can
supply anexpected_hashto require complete known contents before a staged
replacement is published;--inplacemay leave changes on failure. - Before upgrading receiving machines, stop background services with
syq persist off, including any script scopes. Upgrade both machines, then
reconnect withsyq persist connect SERVER. Saved names and directories
carry over, but former--approve alwayssettings now require approval.
Choose--auto-approve-root DIRexplicitly for unattended downloads within
a directory. Older binaries reject the updated preferences; manage them
with the new binary. See updating connections. - The Python SDK now requires Python 3.13.4+. Platform wheels include the
matching executable and expose thesyqcommand. Source installations
require Rust and a C compiler. JavaScript and Go SDK releases are separate.
S3 storage and programmable copies
- Copy to, from, and between S3-compatible buckets with
syq cp; remove
objects withsyq rm, including explicitly selected historical versions.
Support includes pruning, metadata preservation, AWS region discovery,
custom providers and request headers, and resumable multipart transfers.
Bucket-to-bucket copies stay within one storage service. - Use
--auth-from @NAMEto approve S3 work with credentials on a connected
receiving machine. After storage authorization is ready, that machine can
disconnect while the server transfers directly to storage. Authorization
is bounded by its approved lifetime and the provider's credential policies. --src-fdand--as-fdconnect local, SSH, and S3 copies to open files and
shell pipelines. Pythonopen_reader/open_writerprovide managed byte
streams;StreamSource/StreamDestinationcallbacks support generated
or consumed data across mapping entries with shared transfer capacity.- Mapping entries can specify destination metadata and expected hashes.
Failed-entry results preserve those values for retries. Dry-run hash
comparison reports content differences without changing destination data. SYQ_CP_OPTIONS,SYQ_RSYNC_OPTIONS, andSYQ_RM_OPTIONSsupply options
for commands inside scripts without passing those settings to child helpers.
Receiving, performance, and installation
- Receiving profiles support a hard directory root, a separate automatic
approval root, and allowed-server selection. Commands and credential
authorization always require approval. Copies to a named receiving machine
can use encrypted TCP initiated by that machine, with SSH fallback. - Filesystem transfers save local tuning histories and reuse starting worker
counts matched to their context.syq tuning-cacheinspects and clears this
history. Remote hints also distinguish known local networks. History stays
on the coordinator, defaults to a 128 MiB retention target, and can be
disabled withSYQ_TUNING_HISTORY=. - Automatic tuning prepares and reuses connections, explores startup counts,
and evaluates changes against current throughput. Compression adapts to
channel speed. TCP discovery includes IPoIB and uses available macOS link
speed information. - Local macOS copies can use APFS cloning. Small-file batching, metadata
lookup reuse, sparse updates, and transfer-buffer reuse reduce repeated
work. Removal no longer waits unnecessarily after its last task finishes. - Release downloads, helper installation, managed Python downloads, and update
checks usedl.syq.christmas, a maintainer-run cache for GitHub release files.
It records request and location data described in the
install guide. Homebrew installations
receive update reminders too;SYQ_NO_UPDATE_CHECK=1orDO_NOT_TRACK=1
disables reminders. - Release binaries and Python distributions have pinned reproducible build
recipes. The documentation site provides separate stable, archived-release,
and development versions, with command and Python reference pages.
What's Changed
- Prepare Python SDK 0.6.0 by @github-actions[bot] in #344
- Recover Python SDK CI dispatches that select a stale commit by @greaber in #345
- Spread equal-sized file jobs to reduce directory contention by @greaber in #348
- Reduce peak memory for large file queues by @greaber in #346
- Fix scheduler test fixture after compact job storage merge by @greaber in #350
- Reduce temporary descriptors in confined file operations by @greaber in #351
- Reduce descriptor churn in destination metadata batches by @greaber in #352
- Share job snapshots through chunked storage by @greaber in #353
- Fix metadata batch test on macOS filesystems by @greaber in #354
- Allow exact macOS test runs and clarify narrow-change validation by @greaber in #356
- Reuse source metadata parent handles within batches by @greaber in #355
- Isolate metadata parent caches by opened root identity by @greaber in #358
- Automatically prepare source data for local and remote copies by @greaber in #357
- Fix dependency-policy CI by updating rustls by @greaber in #360
- Clarify task-note cleanup and proportionate review assessment by @greaber in #349
- Report transfer activity over time by @greaber in #359
- Bundle the Python SDK CLI with maturin by @greaber in #361
- Require Python 3.13.4 for the SDK and test current patches by @greaber in #364
- Allow source builds to choose official release helpers by @greaber in #362
- Show update reminders for Homebrew installs by @greaber in #365
- Serve releases and update checks through dl.syq.christmas by @greaber in #363
- Strip macOS CI wheels before reproducibility comparison by @greaber in #369
- Update AES runtime dispatch and check dependencies weekly by @greaber in #370
- Make standalone release builds reproducible with Nix by @greaber in #368
- Require reviewers to surface scope the user did not request by @greaber in #374
- Add S3 transfers with automatic parallelism and explicit integrity controls by @greaber in #367
- Add configurable hashing, expected digests, and S3 checksum reuse by @greaber in #366
- Bump the cargo-patches group across 1 directory with 3 updates by @dependabot[bot] in #371
- Bump zstd from 0.13.3 to 0.14.0 by @dependabot[bot] in #372
- Bump jsonschema from 0.33.0 to 0.55.1 by @dependabot[bot] in #373
- Avoid ramp-up delays on short Tigris downloads by @greaber in #376
- Fix truncated S3 fixture responses on macOS by @greaber in #377
- Preserve block reuse with independent hash algorithms by @greaber in #381
- Optimize BLAKE3 in debug builds to prevent macOS preparation timeouts by @greaber in #383
- Bump jsonschema from 0.55.1 to 0.56.0 by @dependabot[bot] in #384
- Support --prune for S3 copies by @greaber in https://github.com/grea...
syq 0.6.0
syq 0.6.0 improves copy safety and performance and changes how receiving machines are selected.
Highlights include safer concurrent copies, lower CPU use for large Linux
transfers, and receiving names that remain assigned while a machine is offline.
Upgrade notes
- Receiving machines now require
@NAME: use--to @laptop,
--auth-from @laptop,--via @laptop, andsyq exec --on @laptop.
--to laptopnow always selects an SSH host, even when a receiving
machine has that name. - Receiving names stay assigned to the same machine while it is offline.
Before upgrading, stop receiving services withsyq persist off, including
any script scopes. Upgrade the commands on both machines, then reconnect
withsyq persist connect SERVER. Older commands do not enforce the new
assignments. To replace a receiving machine, stop its connection and run
syq persist destinations forget NAMEon the server. See
updating connections. - Interrupted copies now leave private
.FILENAME.syq-tmp.RANDOMfiles.
Partials from 0.5.2 (.syq-part.) are not reused or selected by the new
cleanup command. Finish interrupted transfers before upgrading if you need
to preserve their resume progress; otherwise, retry the copy and inspect
old partials before removing them manually. - Both
syq cpandsyq rsyncrefuse replacement between a directory and
any non-directory, even an empty directory. Move or remove the obstruction
before retrying. Replacements between non-directory types remain supported. - When an official release bootstraps an SSH helper, it also tries to install
an independent command at~/.local/bin/syq. This can happen during dry runs,
completion, and background connection setup. Existing commands are kept;
installation failure does not fail the copy. See
automatic installation. - New standalone installations keep their self-update receipt beside the
executable, normally.syq-install.json. Existing receipts in the syq
configuration directory remain supported.
Copying and cleanup
- Concurrent copies use separate partial files and check reused blocks against
the source. A successful retry can leave earlier partials behind.
syq clean-partials --dry-run TREEpreviews their removal; stop copies before
runningsyq clean-partials TREE. Remote cleanup uses--on SERVER. - Resume discovery is bounded: directories with more than 256 partials may
not reuse all of them. Shortened or omitted filename prefixes may also
prevent reuse. These cases resend data rather than compromising the result. - Scan or copy errors now prevent pruning. Pruning also protects recognized
partials, replacement recovery entries, and their parent directories, and
refuses source overlap it can identify. See
pruning rules and coverage. - Failed non-directory replacements preserve the previous destination when
staging fails. Truncated local copies and failed or cancelled range writes
cannot be published as complete files. - Native copies now compare fractional modification times at the precision
suggested by the destination timestamp. This catches more same-size edits
within a second.syq rsynckeeps its whole-second file comparison;
--hash(-cin rsync mode) checks content regardless of timestamps. - macOS copies handle directory permission repair more consistently and no
longer mistake exFAT's unavailable inode count for a full filesystem.
Performance and tools
- Large transfers on Linux can use substantially less CPU when several workers
write one file. This benefits TCP and local range copies while keeping
reception and hashing parallel. PR #336
records the measured CPU savings and copy times, which vary by workload.
Independent SSH helpers do not share this optimization. - Local destinations use directory descriptors directly without a loopback
data connection. Metadata workers are reused between batches, large prune
plans use less temporary storage, and remote alias checks are pipelined. - The benchmark script defaults to small SSH uploads, adds an untimed tuning
warm-up, supports individual tools and explicit syq tuning options, and
separates total time from copying time. Use--mode localfor local tests
and--warmup offto skip warm-up. - Documentation separates task guides from persistence and tuning references.
Existing documentation heading links are preserved.
What's Changed
- Prepare Python SDK 0.5.2 by @github-actions[bot] in #315
- Require explicit user requests before agents create issues by @greaber in #316
- Reuse metadata workers to speed up copies of many small files by @greaber in #314
- Keep user guides concise and add a release docs audit by @greaber in #318
- Keep stderr diagnostic lines intact across helper processes by @greaber in #321
- Warm up network benchmarks and report copying throughput by @greaber in #319
- Test metadata pool configuration and source stat batches by @greaber in #317
- Make concurrent copies use independent partial files by @greaber in #322
- Avoid encrypted TCP overhead in concurrent-copy regression by @greaber in #323
- Skip empty resume scans and unused destination canonicalization by @greaber in #324
- Fix nondeterministic local-copy resume tests by @greaber in #327
- Reserve receiving names with persistent receiver keys by @greaber in #325
- Fix current Linux and macOS CI failures by @greaber in #328
- Prevent incomplete publication and unsafe pruning by @greaber in #326
- docs: add social card metadata to the book theme by @dhyeys54 in #333
- Scope repeated review detection to the same agent by @greaber in #335
- Reduce prune planner memory and skip unnecessary alias lookups by @greaber in #331
- Accommodate destination timestamp precision in native copies by @greaber in #330
- Clarify prune diagnostics and consolidate safety helpers by @greaber in #332
- Fix fresh copies to macOS exFAT destinations by @greaber in #334
- Reduce Linux receiver CPU by serializing range writes per inode by @greaber in #336
- Fix a reader race in the macOS socket deadline test by @greaber in #337
- Replace timed race-test holds with explicit handshakes by @greaber in #338
- Install syq for interactive use when bootstrapping an SSH server by @greaber in #329
- Scale full SSH testing to behavioral impact by @greaber in #339
- Keep copy and performance docs focused on user tasks by @greaber in #340
- Skip unnecessary product tests for documentation-only merges by @greaber in #342
- Add the first changelog with upgrade notes since 0.5.2 by @greaber in #341
- Prepare syq 0.6.0 release by @greaber in #343
New Contributors
Full Changelog: v0.5.2...v0.6.0
syq 0.5.2
syq 0.5.2 adds independent receiving profiles, makes direct copy paths more
efficient, uses smaller streaming blocks by default, and improves the guidance
around the command-line and Python SDK interfaces.
syq recvcan now keep separate named receiving profiles, each with its own
settings, approvals, and worker. Existing single-profile settings continue
to work as the default profile.- Uncompressed copy frames can be written directly into buffered output, and
frame headers share one implementation, reducing copying and allocation in
eligible transfers. - Streaming transfers now use 2 MiB blocks by default, which reduces the
memory reserved for each active streaming worker. - Receiving errors now name the available registered destinations, and copy
approval prompts warn about overwriting an existing destination only when it
applies.
The receiving-profile settings format cannot be read by syq 0.5.1 or earlier.
Upgrade every syq command that shares those settings before creating or using
named profiles. Remote helpers and return peers must continue to run the same
syq build as the command that starts a copy.
What's Changed
- Prepare Python SDK 0.5.1 by @github-actions[bot] in #298
- Make common help useful across commands and add README installation by @greaber in #299
- Make copy approval warnings specific and keep Deny as the default by @greaber in #300
- Explain missing receiving names instead of private registry errors by @greaber in #301
- Support independent named receiving profiles by @greaber in #302
- Align README opening with the documentation landing page by @greaber in #303
- Simplify README opening and list common task links by @greaber in #304
- Clarify README and documentation introduction for new users by @greaber in #305
- Add a usage question issue template by @greaber in #308
- Clarify server-copy and scripting links in the introductions by @greaber in #306
- Avoid serialized copies for uncompressed data blocks by @greaber in #307
- Use Docker for Homebrew release verification by @greaber in #309
- Prepare syq 0.5.2 by @greaber in #310
- Clarify storage placement and server performance troubleshooting by @greaber in #311
- Cap default streaming blocks at 2 MiB by @greaber in #296
- Document streaming defaults in 0.5.2 notes by @greaber in #312
Full Changelog: v0.5.1...v0.5.2
syq 0.5.1
syq 0.5.1 improves local-copy efficiency while preserving existing copy and
fallback behavior.
- Eligible medium-sized files on Linux now reach the guarded receiver-side copy
path with the default request size. This avoids transporting their contents
through userspace when the filesystem can copy them directly. - Destination path mapping reuses owned request payloads instead of cloning
them, reducing peak memory use for small-file batches and ranged writes.
Remote helpers and return peers must run the same syq build as the command that
starts a copy. Managed helpers update automatically; explicitly selected helpers
must be updated before use.
What's Changed
- Prepare Python SDK 0.5.0 by @github-actions[bot] in #292
- Report retried releases as complete by @greaber in #293
- Wait for async process reaping on macOS by @greaber in #295
- Avoid cloning payloads during destination request mapping by @greaber in #289
- Keep local batch selection independent of range request size by @greaber in #294
- Prepare v0.5.1 release by @greaber in #297
Full Changelog: v0.5.0...v0.5.1
syq 0.5.0
syq 0.5.0 adds safer remote-copy controls, automatic streaming for large remote
transfers, and more capable persistent receiving.
- Large remote file ranges stream automatically while short and local copies keep
their existing copy behavior. SSH startup also reserves work before workers
read, which makes a missing destination fail promptly. - A receiving machine can accept explicitly approved commands through
syq exec.
Each command requires its own local decision; copy approval and receiver roots
do not grant command permission. - Restricted receivers can copy a mapping directly between servers and support
--only-new,--only-existing, and--skip-newer. They continue to confine
writes to the approved destinations and verify signed results before success. - Persistent connections use the
syq persistcommand group: usepersist connect,persist receive, andpersist destinationsin place of the former
top-level receiving and destination commands. Durable connections reconnect
when needed and may be reused by independent shells. - The Python SDK has expanded typed mapping, result, and error APIs. Its matching
0.5.0 package will be prepared from this immutable syq release before it is
published.
Remote helpers and return peers must run the same syq build as the command that
starts a copy. Managed helpers update automatically; explicitly selected helpers
must be updated before use.
What's Changed
- Prepare Python SDK 0.4.1 by @github-actions[bot] in #259
- Dispatch generated SDK checks by merge commit by @greaber in #260
- Wait for generated SDK workflow dispatches by @greaber in #261
- Refine Python mapping context, errors, timeouts, and results by @greaber in #258
- Run approved commands on receiving machines over return connections by @greaber in #256
- Avoid duplicate CI for generated Python SDK releases by @greaber in #262
- docs: combine shell completion examples by @greaber in #263
- Disable persistence for fair standalone benchmarks by @greaber in #252
- Apply shared sidebar heading spacing over mdBook defaults by @greaber in #264
- Remove investigation notes and prevent design folder resurrection by @greaber in #265
- Fix TCP replay ID aliases and unauthenticated handshake timeouts by @greaber in #267
- Enforce peer filters, confine source access, and bound decoding memory by @greaber in #269
- Handle return-command version skew and group controls under persist by @greaber in #266
- Validate peer replies and bound TCP discovery resources by @greaber in #270
- Automatically stream larger remote transfers by @greaber in #268
- Put the requested action first in desktop approval prompts by @greaber in #271
- Bound remote-supplied input before allocating or writing it by @greaber in #274
- Harden SDK source arguments, terminal output, and release tag signatures by @greaber in #273
- Fix streaming bandwidth test fixture on macOS by @greaber in #276
- Reduce SSH startup overhead for automatic copies by @greaber in #277
- Connect persistence without a copy and keep SSH logins open by @greaber in #272
- Keep persistence status test sockets within macOS path limits by @greaber in #278
- Trim per-file metadata operations in small-file publication by @greaber in #280
- Improve SSH startup and initial range scheduling by @greaber in #281
- Fix macOS Python cleanup and persistence test races by @greaber in #282
- Validate receiver inputs and preserve JSON progress encoding by @greaber in #279
- Stop active restricted receivers when enrollment is revoked by @greaber in #283
- Support direct SSH transport for restricted copies by @greaber in #284
- Refine native CLI names and safe removal semantics by @greaber in #275
- Speed up cross-filesystem local tree copies without tuning by @greaber in #286
- Fix inode snapshot test synchronization by @greaber in #287
- Support mappings and timestamp skipping on restricted receivers by @greaber in #285
- Prepare v0.5.0 release by @greaber in #290
- Fix macOS async mapping cleanup by @greaber in #291
Full Changelog: v0.4.1...v0.5.0
syq 0.4.1
syq 0.4.1 makes copies through connected machines more reliable and easier to
start, and improves the interactive benchmark and Python documentation.
- Return connections now retry temporary socket exhaustion. Return-copy setup
also handles delayed handshakes, home-relative SSH paths, and helper recovery
more reliably. - A source machine can automatically choose an eligible connected machine to
authorize a copy. Use--auth-from @namewhen you want to select one; the
existing--via @nameoption remains available. - The interactive benchmark chooses a useful data size automatically, reports
setup progress, and records clearer comparable results. - The documentation site now includes a focused Python guide and API reference.
Existing copy commands keep their behavior. Remote helpers and return peers
must use the same syq build as the command that starts the copy.
What's Changed
- Prepare Python SDK 0.4.0 by @github-actions[bot] in #243
- Allow slower macOS benchmark validation by @greaber in #245
- Simplify introductory docs and remove Discussions links by @greaber in #244
- Include Python in the syq release flow by @greaber in #246
- Fix return-copy handshake timing, home paths, and helper recovery by @greaber in #247
- Automatically discover copy authorizers by @greaber in #250
- Harmonize docs UI and highlight features and Python SDK by @greaber in #249
- Deploy the docs when included SDK sources change by @greaber in #254
- Retry return connections after socket timeouts by @greaber in #253
- Simplify benchmark onboarding and show remote setup progress by @greaber in #248
- Automatically size interactive benchmarks with syq by @greaber in #251
- Simplify Python docs for learning and API lookup by @greaber in #255
- Prepare syq 0.4.1 release by @greaber in #257
Full Changelog: v0.4.0...v0.4.1
syq 0.4.0
syq 0.4.0 adds approved copies initiated from remote machines, richer copy
policies, and faster, steadier transfers.
syq recv ongives your laptop a name on connected SSH servers. A server can
send files back withsyq cp results --to @laptop; each request requires
approval on the laptop unless you explicitly enable automatic approval.- A source server can ask your laptop to coordinate a copy to another server
with--via @laptop. The laptop keeps its destination credentials local and
approves the request before connecting onward. --verify-only,--ignore-existing,--existing, and--updateprovide
explicit policies for checking or updating destination entries. The Python
API exposes the same options.- Network setup now overlaps more work, batches remote destination operations,
and can tune transfer internals through--tuning-options. Progress remains
stable during slow or sparse transfers and reports fatal errors clearly. - Shell completion can show file metadata in listing-style results, and the new
interactive benchmark records comparable local, SSH, and network-copy runs.
Existing copy commands keep their behavior. Receiving settings are upgraded
when this release starts the service; after returning to an older syq build,
configure receiving again before using it. Remote helpers and return peers must
use the same syq build as the command that starts the copy.
What's Changed
- docs: explain development remote helper and receiver setup by @greaber in #227
- Prepare Python SDK 0.3.2 by @github-actions[bot] in #228
- Move docs controls into the existing site header by @greaber in #230
- Add native comparison and overwrite policies; clarify copy defaults by @greaber in #229
- Make syq cat print in bursts and add pronunciation to docs by @greaber in #234
- Keep progress stable during slow transfers by @greaber in #232
- Add experimental transfer controls for benchmarking by @greaber in #235
- Show ls-style file details in completion listings by @greaber in #237
- Enable background server-to-laptop copies through persistence by @greaber in #233
- Reduce round trips in remote destination setup by @greaber in #238
- Overlap TCP route probing with buffered source planning by @greaber in #239
- Add an interactive local and SSH benchmark script by @greaber in #231
- Fix the tuning TCP test fixture on macOS by @greaber in #236
- Require local approval for incoming return copies by @greaber in #240
- Add approved server-to-server copies with --via by @greaber in #241
- Prepare syq 0.4.0 and fix macOS benchmark quoting by @greaber in #242
Full Changelog: v0.3.2...v0.4.0
syq 0.3.2
syq 0.3.2 improves SSH startup, small network copies, and shell completion.
- Persistent SSH connections start reliably on macOS, and small updates can stay on the existing control connection to avoid extra connection setup.
- Remote copies can omit destination placement:
syq cp project --to servercopies into your home directory on the server, andsyq cp --from server projectcopies into your current local directory. Local-only copies still require explicit placement. - Source-built syq automatically uploads its own helper to compatible SSH hosts, making development builds easier to use remotely.
- Bash completion handles literal fragments correctly, and completion across supported shells follows command syntax, path policies, and command modes more closely.
- Documentation now starts with practical tasks and illustrates where copied files go.
Existing commands with explicit destination placement keep their behavior. Commands that previously failed because remote destination placement was omitted now perform the copy using the defaults above. No stored-state migration is introduced by this release; remote helpers continue to require the same build identity as the initiating syq.
What's Changed
- Prepare Python SDK 0.3.1 by @github-actions[bot] in #212
- Add remote copy path defaults and clarify CLI help by @greaber in #214
- Upload source-built remote helpers and simplify installation by @greaber in #213
- Document compatibility boundaries and agent upgrade guidance by @greaber in #218
- Remove the design folder by @greaber in #220
- Make shell completion follow command grammar and path policies by @greaber in #216
- Fix persistent SSH startup and speed up small updates by @greaber in #217
- Make docs shorter and illustrate copy placement by @greaber in #215
- Remove outdated use-case survey by @greaber in #222
- docs: link to GitHub Discussions by @greaber in #224
- Prepare syq 0.3.2 by @greaber in #225
- Share blue syq branding while preserving the compact docs sidebar by @greaber in #219
- Trim README to benefits and project links by @greaber in #226
Full Changelog: v0.3.1...v0.3.2
syq 0.3.1
syq 0.3.1 makes command-line help easier to navigate and strengthens release validation.
- Command help now starts with examples and commonly used options. Use
--help-allfor the complete reference, orsyq help receiver enrollto navigate nested commands. syq --self-update --helpexplains standalone upgrades and update reminders. Shell completion continues to include options omitted from common help.- Dry-run help now clarifies that requested results files and remote helper caches may still be written; source and destination copy data remain unchanged.
- Releases now require full Apple Silicon macOS certification, validate source-package bytes before publication, and smoke-test the generated installer with the actual Linux binary.
No copy-command migration is required from 0.3.0. Help output has changed; scripts that inspect help should use --help-all when they need every option. In rsync mode, -h still means human-readable sizes.
What's Changed
- Prepare Python SDK 0.3.0 by @github-actions[bot] in #208
- Add progressive CLI help and fix help inconsistencies by @greaber in #210
- Reuse release readiness and validate publication inputs once by @greaber in #209
- Prepare syq 0.3.1 release by @greaber in #211
Full Changelog: v0.3.0...v0.3.1