Skip to content

Releases: Bitspark/bitruntime

bitruntime v0.4.2

Choose a tag to compare

@github-actions github-actions released this 27 Sep 19:30
e9c80c9

bitruntime v0.4.2

A patch release over the public bitwire 0.3.0 contract, speaking
bitwire/1. It closes two asymmetries between the Go and TypeScript
transports (bitruntime#26):

  • The TypeScript pipe takes a receive limit. pipe(limit) refuses a frame
    over limit bytes (UTF-8 for text) before delivery and ends the pipe with
    1009 on both ends, as Go's Pipe(limit) and a WebSocket do. pipe()
    with no limit is unchanged.
  • A Go transport's receiver reports its own refusal. When the pipe or the
    WebSocket transport refuses a frame over its receive limit, the receiver's
    error is now a *CloseError with code 1009 and the new Local field
    set. It is still a closed carrier (errors.Is(err, ErrClosed)). Before, the
    receiver got a bare closed error, and an observer of its side read 1006. The
    transport conformance suite (transporttest) now requires this of every
    transport.
  • The testees use both. The TypeScript testee's conn.pipe accepts a
    limit, and the Go testee reads its side's close from the transport alone.

Not changed: whether TypeScript's FrameConnection gains an abort() is an
interface decision, which stays open on #26 beside bitwire's carrier
guarantees.

Evidence

  • bitwire's runner and evidence at bitwire 3b237aa, core scope, over
    WebSockets, pairings Go/Go (-race), TypeScript/TypeScript, and Go with
    TypeScript in both orders.
    • bitruntime (Go): core claim supported, 345 of 345.
    • bitruntime (TypeScript): core claim supported, 345 of 345.
  • Go (-race) and TypeScript suites (237 tests); the new conformance subtest
    fails against the old pipe. The cross-language testee smoke passes.

Coordinates. Go: module github.com/Bitspark/bitruntime at the v0.4.2
tag, with the command cmd/bitwire-testee/go. TypeScript: the package
@bitspark/bitruntime 0.4.2 and the testee @bitspark/bitruntime-testee
0.4.2, both published as this release's tarballs with SHA-256 checksums, not to
an npm registry. Under npm 12, a consuming project allows their URLs with
allow-remote=root and names both.

Not in this release: live references, tunnels, the framed byte stream
bitwire-stream/1, observation and tracing hooks, authentication integration,
and received-context evidence as a contract field.

bitruntime v0.4.1

Choose a tag to compare

@github-actions github-actions released this 27 Sep 16:53
8fe8754

bitruntime v0.4.1

A patch release over the public bitwire 0.3.0 contract, speaking
bitwire/1. With it, both driver-1 testees support the core claim of
bitwire's bitwire/1 conformance contract, edition 1.

  • A peer's deadline is its caller's
    (bitruntime#23). bitwire/1
    fails a call locally when its caller's deadline passes and sends a cancel;
    request_timeout is the caller's own error, never a frame.
    • Go: an application's own call that outlives its peer's
      RequestTimeout now fails with context.DeadlineExceeded, the error its
      own deadline gives, instead of a public cancelled.
    • TypeScript: a request the root forwards for another carrier is now
      answered cancelled across the wire, instead of request_timeout.
    • In both languages a cancel still goes to the remote. A test in each
      language fails without the fix.
  • The TypeScript testee reports 1009 when its WebSocket refuses a frame over
    the peer's limit, for dialled, accepted and peer.over peers, as the Go
    testee does. Before, it reported the 1006 its socket's close leaves when the
    remote does not answer the close.
  • The testee's install instructions name both asset URLs for npm 12.

Evidence

  • bitwire's runner and evidence at bitwire c3440df (bitwire#62, #63), core
    scope, over WebSockets, in every pairing: Go/Go (the Go testee under
    -race), TypeScript/TypeScript, and Go with TypeScript in both orders.
    • bitruntime (Go): the core claim is supported, 345 of 345 required
      cases.
    • bitruntime (TypeScript): the core claim is supported, 345 of 345.
  • Go (-race) and TypeScript suites (236 tests), and the cross-language testee
    smoke from source and from the packed tarballs.

Coordinates. Go: module github.com/Bitspark/bitruntime at the v0.4.1
tag, with the command cmd/bitwire-testee/go. TypeScript: the package
@bitspark/bitruntime 0.4.1 and the testee @bitspark/bitruntime-testee
0.4.1, both published as this release's tarballs with SHA-256 checksums, not to
an npm registry. Under npm 12, a consuming project allows their URLs with
allow-remote=root and names both.

Not in this release: live references, tunnels, the framed byte stream
bitwire-stream/1, observation and tracing hooks, authentication integration,
and received-context evidence as a contract field.

bitruntime v0.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 15:58
727a7d3

bitruntime v0.4.0

Driver-1 testees for bitwire's bitwire/1 conformance contract, edition 1,
in Go and TypeScript, over the public bitwire 0.3.0 contract
(bitruntime#20). A testee
is one bitruntime peer under remote control: bitwire's runner drives two of
them over WebSockets and judges what they answer. The testees are test
tooling, never a runtime dependency.

  • Go: the command cmd/bitwire-testee/go in this module, at this tag.
  • TypeScript: the release asset bitspark-bitruntime-testee-0.4.0.tgz,
    whose bin is bitwire-testee. It depends on this release's package asset,
    so no testee code ships inside @bitspark/bitruntime.

Both are ported from nightseam v0.6.0's testees (5cc9723) onto bitruntime's
public API, with provenance in NOTICE and the differences in
the port record. They claim the
core layers, seam and peer, with the features listen, pipe, lazy and
propagator. Tunnels answer unsupported until bitruntime implements them.

Fixed: a peer handed a frame over its own frame limit now ends the
connection with 1009, which bitwire/1 binds for a frame over the receiver's
limit. v0.6.0, and bitruntime until now, closed 4011 there. Its transports
already refused with 1009 at their own limits; this is the peer's backstop when
a connection's limit is laxer than the peer's.

Evidence

  • bitwire's runner (bitwire#62 at 19d4081, edition 1) over WebSockets, core
    scope. The pairings were Go/Go, TypeScript/TypeScript, and Go with
    TypeScript in both orders; the Go testee was built with -race.
    • Per implementation, 321 of 327 required cases pass.
    • The six others are one scenario, as written and mirrored, in each pairing.
      Its raw frame names a plain method (echo), which bitruntime, serving only
      canonical path names, answers method_not_found. That is a contract
      question raised in bitwire; the core claim waits on it.
  • scripts/testee-smoke.mjs drives both testees across languages, from
    source and from the packed tarballs, in CI and before release.
  • Go (-race) and TypeScript suites (234 tests), with a regression test for
    the 1009 close in each language that fails without the fix. Interop with
    nightseam v0.6.0 is unchanged.

Coordinates. Go: module github.com/Bitspark/bitruntime at the v0.4.0
tag, packages core/go, transports/go, transports/websocket/go,
engine/go, engine/websocket/go, dispatch/go and the command
cmd/bitwire-testee/go. TypeScript: the package @bitspark/bitruntime 0.4.0
with the subpaths /core, /transports, /engine and /dispatch, and the
testee @bitspark/bitruntime-testee 0.4.0. Both are published as this
release's tarballs with SHA-256 checksums, not to an npm registry. Under
npm 12, a consuming project allows their URLs with allow-remote=root.

Not in this release: live references, tunnels, the framed byte stream
bitwire-stream/1, observation and tracing hooks, authentication integration,
and received-context evidence as a contract field.

bitruntime v0.3.0

Choose a tag to compare

@github-actions github-actions released this 27 Sep 13:36
26d1138

bitruntime v0.3.0

Carries a WireTree across a carrier, in Go and TypeScript, over the public
bitwire 0.3.0 contract. The protocol revision bitwire/1 is unchanged.

A carrier path names a position, not a node. The two bridges are therefore
explicit, and neither infers structure from an opaque endpoint
(bitruntime#15):

  • Bind/bind (core): an addressless Wire that sends at one fixed
    addressed path. Bind(a, p).Send(m) is a.Send(p, m), with the message,
    the return capability and any refusal unchanged. The path is copied, and
    the result grants nothing but sending. A near tree binds each far position
    it names.
  • Serve/serve (dispatch): serves a tree beneath a nonempty prefix.
    • Each position whose keys are UTF-8 gets one exact dispatcher route, bound
      to that position's own Wire. A node shared by two positions is served
      at both.
    • A binary-keyed child and its whole subtree are not served, and
      Unreachable lists them.
    • A request the node refuses is answered (internal, or the refusal's
      public code). A refused event is dropped and never ends the carrier.
    • Update replaces the served tree atomically. A request admitted before
      the update keeps the node that admitted it, its cancellation included.
    • Close releases only the routes, never the dispatcher or its endpoint.
  • RouteSet (dispatch): a group of dispatcher routes its owner replaces as
    a whole, atomically. Serve is built on it.
    • A delivery racing a replacement is routed by the old set or the new one,
      never refused method_not_found. Replacing by detaching then registering
      leaves that gap.
    • An admitted request's cancellation stays with the route that admitted it.
    • A refused Set changes nothing.
  • Compose/compose refuse a missing own value (bitwire decision 0012:
    every node has one). v0.2.0 accepted one, and sending to it failed later.

Evidence

  • Go (under -race) and TypeScript tests for each item:

    • a concurrent swap test, which fails 3 of 3 runs if the swap detaches and
      then registers;
    • captured cancellation across replacement;
    • binary-keyed subtrees and a key with a leading U+FEFF;
    • refused requests and events over a real WebSocket;
    • an empty prefix, conflicting routes and a missing own.
  • bitwire's independent conformance/wiretree cases (bitwire#57) pass with
    bitwire's test-only adapters replaced by Bind, Serve and Update, in Go
    (-race) and TypeScript. Before release they were run from a scratch copy
    of bitwire's drivers:

    • structure 19/19 and bridge 1/1;
    • carrier 7/7 over the local pair and WebSockets in both directions;
    • every unlawful mutant still rejected, retargeting-serve by
      carrier-cancel-across-replacement.

    No case or expectation was changed. The other runtime families are
    unchanged, trees 14/14 included.

  • The v0.2.0 suites and the nightseam v0.6.0 interoperability run
    (node scripts/interop.mjs) unchanged.

Coordinates. Go: module github.com/Bitspark/bitruntime at the v0.3.0
tag, packages core/go, transports/go, transports/websocket/go,
engine/go, engine/websocket/go and dispatch/go. TypeScript: the package
@bitspark/bitruntime 0.3.0 with the subpaths /core, /transports,
/engine and /dispatch, published as this release's tarball with a SHA-256
checksum. It is not published to an npm registry. Under npm 12, a consuming
project allows its URL with allow-remote=root in .npmrc.

Not in this release: live references, tunnels, the framed byte stream
bitwire-stream/1, observation and tracing hooks, authentication integration,
and received-context evidence as a contract field.

bitruntime v0.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 11:13
e28bb1a

bitruntime v0.2.0

The runtime path that hand-written adapters use, in Go and TypeScript, over
the public bitwire 0.3.0 contract, speaking the protocol revision
bitwire/1:

  • core: the structural core of v0.1.0 (trees, selection, decomposition,
    derived sending); the addressed operators At/at, Mount/mount and
    Forward/forward; the local pair; the public invocation lifecycle.
  • transports: the frame transport seam, the in-memory pipe and WebSocket,
    with one closed classification and a sendable/observe-only split of close
    codes.
  • engine: the bitwire/1 peer over any transport and WebSocket connection
    setup (Accept, NewHandler, Dial; Peer.connect, Peer.attach).
  • dispatch: the dispatcher and the Call, Emit, Handle and Register
    helpers (call, emit, handle, register, onEvent).

It is ported from nightseam v0.6.0 (5cc9723), with provenance in NOTICE and
every change in the port record. nightseam's recorded
defects in this path are fixed rather than ported: queued refusals are answered
when a pair closes (nightseam#722), a pair's pending slot is free before its
caller holds the answer (nightseam#658), ended carriers answer disconnected,
observe-only close codes are never sent, a forwarder fails only a refused
message, and a closing peer's code reaches the far side.

Evidence

  • bitwire/1 is unchanged: bitruntime interoperates with nightseam v0.6.0 in
    every pairing of Go and TypeScript over real WebSockets, and sends the same
    bytes (node scripts/interop.mjs). The envelope tables of v0.6.0 are held by
    a running peer of each role.
  • bitwire's independent cases, run from bitwire's own test-only module against
    this release: lifecycle, composition groups, declared composites (reference
    realization; production gaps recorded) and trees, over the local pair and
    WebSockets in both directions.
  • The v0.6.0 Go and TypeScript test suites, ported with their expectations.

Coordinates. Go: module github.com/Bitspark/bitruntime at the v0.2.0
tag, packages core/go, transports/go, transports/websocket/go,
engine/go, engine/websocket/go and dispatch/go. TypeScript: the package
@bitspark/bitruntime 0.2.0 with the subpaths /core, /transports,
/engine and /dispatch, published as this release's tarball with a SHA-256
checksum; it replaces @bitspark/bitruntime-core and is not published to an
npm registry.

Not in this release: live references, tunnels, the framed byte stream
bitwire-stream/1, observation and tracing hooks, authentication integration,
and received-context evidence as a contract field, which awaits a later
bitwire revision.

bitruntime v0.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 09:24
d1280b5

bitruntime v0.1.0

The first release implements the shared structural core over the public
Bitwire 0.3.0 contract in Go and TypeScript:

  • Full generic Deixis tree construction, own values, complete exact-byte-keyed
    children, partial selection, decomposition and reconstruction.
  • WireTree = DeixisNode<Wire> and derived sending through the selected
    node's own addressless Wire.send(message).
  • Explicit addressed access over a complete tree for the existing UTF-8
    string-path carrier surface, with missing-path refusal and no lifetime
    ownership transfer.
  • Independent Bitwire structural observations plus native edge-case tests.

This release does not include carriers, protocol engines, dispatch, live
references, tunnels or a completed bitsystem3/Nightseam migration. An opaque
AddressedWire cannot be converted into a full tree without a complete
declaration. Data reading and storage remain Bitstore's responsibility.

Go is available through the v0.1.0 module tag. The TypeScript package is
published as a GitHub release tarball with a SHA-256 checksum; it is not yet
published to an npm registry.