Skip to content

Releases: sandgorgon/9vcs

v0.1.9

Choose a tag to compare

@github-actions github-actions released this 30 Sep 01:56
ba0c765

What's Changed

  • Accept multi-line messages: repeatable -m like Git by @sandgorgon in #41

Full Changelog: v0.1.8...v0.1.9

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 12 Sep 01:34
ac3a42b

What's Changed

Full Changelog: v0.1.7...v0.1.8

v0.1.7

Choose a tag to compare

@github-actions github-actions released this 10 Sep 02:34
6f5d60d

What's Changed

  • Add 9sh-native root resolution over a namespace-first fsx.FS/Tree seam by @sandgorgon in #36
  • Add CHANGELOG entry for v0.1.7 by @sandgorgon in #37

Full Changelog: v0.1.6...v0.1.7

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 04 Sep 03:11
8f8b339

What's Changed

  • Document 9vcs restore in the README recovery section by @sandgorgon in #32
  • Refresh PLAN.md Status: date and go.mod version by @sandgorgon in #33
  • Fix line-graph self-fork from same-patch multi-line delete runs by @sandgorgon in #34
  • Add CHANGELOG entry for v0.1.6 by @sandgorgon in #35

Full Changelog: v0.1.5...v0.1.6

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 01 Sep 16:09
54adb29

What's Changed

Full Changelog: v0.1.4...v0.1.5

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 30 Aug 00:30
b9a3e70

What's Changed

  • Add CHANGELOG entry for v0.1.3 by @sandgorgon in #24
  • Extract working-tree-diff orchestration into a repo library by @sandgorgon in #27
  • Add selective (partial) record, keyed by line identity by @sandgorgon in #28

Full Changelog: v0.1.3...v0.1.4

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 28 Aug 07:40
9e13ba2

What's Changed

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 25 Aug 23:20
5e0a70b

What's Changed

  • Add binary release workflow and document it in the README by @sandgorgon in #19

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@sandgorgon sandgorgon released this 25 Aug 22:44
ec509c0

[0.1.1] - 2026-08-25

Follow-ups from actually dogfooding v0.1.0 (a real two-person-plus
workflow: serve/import/reconcile including genuine divergence
and conflict resolution, bundle export/import, offer/offer apply). No functional or security issues found — these are all
polish/documentation gaps.

Fixed

  • 9vcs help's status line still advertised the removed rename
    detection's R/R+ codes; corrected to (A/M/D/U).
  • Text conflicts (the most common kind) fell through to a generic
    CONFLICT: path message in merge/apply's output, unlike
    binary/symlink/type/modify-delete conflicts, which all got a
    specific, actionable one. Added an explicit message pointing at the
    <<<<<<</=======/>>>>>>> markers.

Documentation

  • Clarified that serve only reads .9vcs/authorized-peers once, at
    startup — editing it doesn't revoke or grant access on an
    already-running server the way "immediately" implied.
  • Documented that running offer list/apply/remove against your
    own serve requires your own fingerprint to also be listed in your
    own authorized-peers — otherwise the connection is refused.
  • Documented the "a network push refuses to move the branch checked
    out on the serving machine" behavior in the team workflow section,
    with the actual recommended pattern (keep a non-shared branch
    checked out where you serve from).

v0.1.0

Choose a tag to compare

@sandgorgon sandgorgon released this 25 Aug 21:28
6560add

Changelog

All notable changes to 9vcs are documented here. Format loosely follows
Keep a Changelog; versioning is
semver, with the caveat described in the
README's Versioning and compatibility
section — the on-disk patch/bundle format makes no compatibility
promise between pre-1.0.0 releases.

[0.1.0] - 2026-08-25

First tagged release.

Added

  • Full local operation: init, record, log, branch, diff,
    checkout, merge, status — real patch-graph conflict detection
    (line-level forks, binary/symlink conflicts, modify/delete races),
    not a three-way text diff.
  • apply: N-way merge of multiple patches/branches in a single step.
  • Networking: 9vcs serve (a 9P2000 server over TLS 1.3 with pinned-
    fingerprint peer authentication), import (one-way pull), and
    reconcile (bidirectional pull/push), each gated by per-peer
    read/propose/write permissions.
  • Offline change exchange: bundle export/import/show (signed,
    single-file patch bundles) and offer/offer list/offer apply
    (submit a change without write access, via a peer's /offers
    mailbox).
  • Per-patch authorship: optional Ed25519 signing
    (AuthorFingerprint/AuthorSignature), verified independently of
    transport-level trust — a relay can't forge authorship of a patch it
    merely passes along.
  • .9vcsignore support, executable-bit and symlink tracking.
  • Client-side known-peers store with trust-on-first-use semantics for
    import/reconcile.

Security

A round of audits ahead of this release found and fixed several real
issues: path traversal (via patch file paths, ref names, and
symlinks), a couple of unbounded-allocation/CPU-exhaustion vectors
reachable over the network, a local ref-write race, and a
merge-conflict-detection gap that could silently drop one side's
content instead of reporting a conflict. See PLAN.md for
the full writeup of each.

Known limitations

  • iOS and Windows builds are unverified — untested on either platform
    (see PLAN.md's "Open items to revisit").
  • No format-compatibility promise between v0.x releases — see
    Versioning and compatibility.