Skip to content
go-libfossil Tags and Properties
Login

Tags and Properties

Tags and Properties for Check-in 2f1e5f1e3d

Context
2026-10-24
13:58 • Edit [2f1e5f1e3d]: Add tag "v0.16.0" with note "Release v0.16.0

go-libfossil now covers every requirement of draft-fossil-horizon-00 as zit 0.7.1 released it. It signs as fossil and zit do, and it compiles with TinyGo: - Named horizons: repo clone --horizon NAME --depth N clones at tip, a branch, a tag or a full hash, stepped back N check-ins. The origin resolves the name and echoes the check-in it chose. Against stock fossil, the clone resolves the name itself. - Seed binding: every seed carries a signed T +horizon-seed <C> <rule> card. A clone refuses a seed that is not bound to its own check-in and rule, and one dated before the seed it holds. Seeds are byte-identical with zit 0.7.1's, and each clones the other at the structural horizon. - Seed refusal: an origin refuses a pushed seed atomically. The check runs on expanded content, whenever the seed's base arrives. A withheld seed is never linked, announced or served. - Signing: clearsign and pgp-command sign check-ins with PGP or SSH keys, readable by fossil 2.28 and zit. Seeds are signed separately, by horizon-seed-command, in the SSH namespace fossil-horizon-seed. - TinyGo: the whole public API builds for wasm, 1.40 MB gzipped. - Fixes: a two-delta cycle no longer holds the write lock for about 30s per push. An origin holding a dangling delta can be cloned. Pulls ask for phantoms in hash order.

Behavior changes to check when upgrading: - Seeds are no longer signed by clearsign/pgp-command. Set horizon-seed-command to sign them; with none set they go out unsigned. - Seed SSH signatures use the namespace fossil-horizon-seed. clearsign.Key.Verify takes the namespace. - seed.Mint takes the horizon's rule. - A v0.15.0 seed has no binding card. A store holding one takes a bound seed on its first pull from an upgraded origin. - A user whose login is go-libfossil cannot push control artifacts.

Known limitation (#479): cancelling a tag on the origin can make a clone refuse the next seed until a newer tag or a deepen. zit 0.7.1 behaves the same way, and the fix will land in the draft and both implementations.

See CHANGELOG.md for the full list.". artifact: 41e7a6f840 user: [email protected]

13:58
Merge pull request #481 from danmestas/release/v0.16.0

chore(release): v0.16.0 check-in: 2f1e5f1e3d user: [email protected] tags: main, trunk, v0.16.0

13:29
Merge pull request #478 from danmestas/feat/horizon-seed-binding

feat(horizon): bind each seed to its horizon and sign seeds apart check-in: b35d577a54 user: [email protected] tags: main, trunk

2026-04-19
16:30
Initial open source release

libfossil is a pure-Go implementation of the Fossil SCM, reading and writing the same .fossil SQLite repository format as upstream Fossil.

This is the first public release of code that previously lived in a private repository. The module path is github.com/danmestas/libfossil and the binary is named libfossil to avoid $PATH collisions with upstream fossil.

Included: - Repo lifecycle (create, clone), checkout/checkin, timeline, merge, diff, annotate, shun, tag, branch, bisect, stash, undo/redo - Sync-over-HTTP protocol (client and handler) - Two SQLite drivers: modernc (pure Go, default) and ncruces (wasm-capable) - Observer interfaces (SyncObserver, CheckoutObserver) with an optional OpenTelemetry implementation in observer/otel (separate submodule) - Deterministic simulation testing harness with BUGGIFY fault injection - Kong-based embeddable CLI under cli/ and a standalone binary under cmd/libfossil/ check-in: f5744359d3 user: [email protected] tags: trunk