← Versions 1.0.0 In progress

1.0.0

Two backlogs: the release scope, and what the work turned up.

Backlog 1 — release scope

Planned work. An item is only here if it loses data, breaks a promise on a public surface, or stops a stranger installing and running the thing. A ticket that reaches Done carries the version it shipped in.

KeySummaryComponentStatusVersionBlocked by
SAPE-1Build identity: version embedded, version command, product version in handshakeserverDone1.0.0
SAPE-2Versioning and compatibility policydocsTo do
SAPE-3Prebuilt binaries and a published container imagereleaseTo do
SAPE-4Tag-driven release workflow for the serverreleaseTo do
SAPE-5Install path and quickstartdocsTo doSAPE-3
SAPE-6Upgrade rehearsal: one build writes, the next reads it all backserverTo doISS-4
SAPE-7Config reload, led by partial reloadserverTo do
SAPE-8Read an operation's cost envelope before trusting itserverTo do
SAPE-9Name collision: decide whether namespaces existserverTo do
SAPE-10Sign and verify an operation binaryserverTo do
SAPE-11List the external operations installed on a serverserverTo doSAPE-8
SAPE-12One worked external operation, published as a challengedocsTo doSAPE-7, SAPE-10
SAPE-13An artifact describing the shape of a request bodyprotocolTo do
SAPE-14Declare for collectionsserverTo do
SAPE-15learn.sapedb.comdocsDone1.0.0
SAPE-16sapedb.comdocsDone1.0.0
SAPE-17The on-disk format tag and the key labels say sapedbserverDone1.0.0
SAPE-18Reads share a database instead of queueing behind each otherserverDone1.0.0
SAPE-19Declare an operation against a running daemon — frame 13protocolDone1.0.0
SAPE-20Composed operations, with a ceiling readable at any depthserverDone1.0.0
SAPE-21Scopes travel the wire as a signed grantserverDone1.0.0
SAPE-22A count must declare how far it walksserverDone1.0.0
SAPE-23InvokeVersion, so an older declaration is reachableprotocolDone1.0.0
SAPE-24Three clients, each run against a real daemonclientsDone1.0.0
SAPE-25Desktop workbench: connections, catalogue, run, shell, compose, declaredesktopDone1.0.0

11 done, 14 open. SAPE-1 unblocked SAPE-2, 3, 4 and 6 when it landed; SAPE-6 now waits on ISS-4 instead, because the refusal path it measures has no test to build on.

Backlog 2 — issues found while working

Opened by the work in Backlog 1, not planned before it. Each one is triaged once: Fix in 1.0.0 only if it loses data, breaks a public promise, or blocks installing and running; otherwise Defer, and it goes to planning for the next version. The triage column is the decision, not a guess at how bad it feels.

KeySummaryFound whileTriageStatusVersion
ISS-1The covering index is built, decoded per entry, then discardedSAPE-20DeferOpen
ISS-2Two fixture copies kept identical by hand; nothing compares themSAPE-19DeferOpen
ISS-3The fixture covers 8 of 13 frame typesSAPE-13DeferOpen
ISS-4The ErrFormat refusal path has no test at allSAPE-6Fix in 1.0.0Open
ISS-5A composed operation's rows come back flat and unlabelledSAPE-20DeferOpen
ISS-6An encryption test is flaky: it searches ciphertext for a 3-character stringSAPE-17DeferOpen
ISS-7internal/cli's open() leaks partition files, as Server.Close didSAPE-19DeferOpen
ISS-8Two write handlers in one file roll back differentlySAPE-19DeferOpen
ISS-9A read-only composed operation takes the write lockSAPE-20DeferOpen
ISS-10A composed operation must name a collection it may never touchSAPE-20DeferOpen
ISS-11A grant has no expiry and cannot be revoked short of rotating the server secretSAPE-21Fix in 1.0.0Open
ISS-12The TypeScript client cannot present a grant, so it cannot reach a scoped operationSAPE-21Fix in 1.0.0Open
ISS-13Declaring a collection is not recorded against anybodySAPE-19DeferOpen
ISS-14The old product name survives in three production constants, assembled byte by byteSAPE-17DeferOpen
ISS-15The release plan went stale the same day it was writtenSAPE-2Done1.0.0
ISS-16The TypeScript client ignores the product version the daemon now sendsSAPE-1DeferOpen
ISS-17sapedbd has no version command; it only says so in a log lineSAPE-1DeferOpen
ISS-18A linker stamp aimed at a symbol that does not exist is accepted in silenceSAPE-1DeferOpen

How an issue gets triaged

One question, asked once, and written down: does it lose data, break a promise on a public surface, or stop somebody installing and running the thing? Three of eighteen answer yes. The rest are real — some are embarrassing — and they wait, because a backlog that grows as fast as it shrinks has no answer to is it done yet.

What 1.0.0 freezes

A version number here is a promise that cannot be withdrawn. From the tag onwards these four surfaces are fixed: the on-disk format, the wire protocol (frames 1…13 never change role; new frames start at 14; fields may be added, never renamed or removed), the meaning of a declaration, and the public API. It does not promise performance, the ordering of reads against writes, the file layout inside a partition, or anything under internal/.