Releases: Bitspark/bitruntime
Release list
bitruntime v0.4.2
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
overlimitbytes (UTF-8 for text) before delivery and ends the pipe with
1009 on both ends, as Go'sPipe(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*CloseErrorwith code 1009 and the newLocalfield
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.pipeaccepts 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
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 acancel;
request_timeoutis the caller's own error, never a frame.- Go: an application's own call that outlives its peer's
RequestTimeoutnow fails withcontext.DeadlineExceeded, the error its
own deadline gives, instead of a publiccancelled. - TypeScript: a request the root forwards for another carrier is now
answeredcancelledacross the wire, instead ofrequest_timeout. - In both languages a
cancelstill goes to the remote. A test in each
language fails without the fix.
- Go: an application's own call that outlives its peer's
- The TypeScript testee reports 1009 when its WebSocket refuses a frame over
the peer's limit, for dialled, accepted andpeer.overpeers, 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.
- bitruntime (Go): the core claim is supported, 345 of 345 required
- 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
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/goin this module, at this tag. - TypeScript: the release asset
bitspark-bitruntime-testee-0.4.0.tgz,
whosebinisbitwire-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, answersmethod_not_found. That is a contract
question raised in bitwire; the core claim waits on it.
scripts/testee-smoke.mjsdrives 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
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 addresslessWirethat sends at one fixed
addressed path.Bind(a, p).Send(m)isa.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 ownWire. A node shared by two positions is served
at both. - A binary-keyed child and its whole subtree are not served, and
Unreachablelists 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. Updatereplaces the served tree atomically. A request admitted before
the update keeps the node that admitted it, its cancellation included.Closereleases only the routes, never the dispatcher or its endpoint.
- Each position whose keys are UTF-8 gets one exact dispatcher route, bound
RouteSet(dispatch): a group of dispatcher routes its owner replaces as
a whole, atomically.Serveis built on it.- A delivery racing a replacement is routed by the old set or the new one,
never refusedmethod_not_found. Replacing by detaching then registering
leaves that gap. - An admitted request's cancellation stays with the route that admitted it.
- A refused
Setchanges nothing.
- A delivery racing a replacement is routed by the old set or the new one,
Compose/composerefuse 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.
- a concurrent swap test, which fails 3 of 3 runs if the swap detaches and
-
bitwire's independent
conformance/wiretreecases (bitwire#57) pass with
bitwire's test-only adapters replaced byBind,ServeandUpdate, 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-serveby
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
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 operatorsAt/at,Mount/mountand
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/1peer over any transport and WebSocket connection
setup (Accept,NewHandler,Dial;Peer.connect,Peer.attach). - dispatch: the dispatcher and the
Call,Emit,HandleandRegister
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/1is 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
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 addresslessWire.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.