nomos_client 0.45.0
nomos_client: ^0.45.0 copied to clipboard
Nomos 2 Dart frontend types — the hand-written kernel wire types plus the code-generated per-domain aggregate + directive-payload types. (De)serializes the EXACT serde JSON the Rust kernel + projectio [...]
0.45.0 #
offerOutcome(...)— the one outcome-returning offer lane generated clients now call for EVERY directive: returnsNomosOfferOutcomewith workspace-stampedcreated(NomosCreatedgainsworkspace+ aNomosRef get refview). Activity raw rows carrycreated+workspace. Requiresnomos_types >= 0.1.3.
0.44.0 #
- Activity-feed runtime reads on
NomosBridge/NomosSession:activityLog({base, limit})— the committed intent log as raw rows{intentId, domain, directiveId, actorSubject, occurredAt, payload}(decoded payload; the verified author; the physical HLC) — andwatchActivity({base}), a stream re-deriving the feed on every sync tick. Generic (raw Maps); the generatedrenderActivity(from directives' declared.activity()metadata) types them intoActivityEvents. Requiresnomos_types >= 0.1.2.
0.43.0 #
NomosBridge.foreignReader({cloud})— aNomosForeignReaderbacked by the device's multi-workspace bridge plane, so a generatedForeignRef(t.foreignRef) resolves against real data: it mounts the foreign workspace on demand (connect(session: ws, allowUnborn: true), idempotent) and reads it (session(ws).queryById(id));watchre-reads on each sync tick. A locator resolver, not a foreign key — the foreign holon is mounted only when you resolve. Requiresnomos_types >= 0.1.1(theForeignReftypes).
0.41.0 #
NomosTestHarnessemits named phase-progress diagnostics (install → spawn runner → await ready → connect, plus per-session progress incluster) and eachconnect()carries aconnectTimeout(default 120s) that throws a NAMED remedy instead of hanging — so a multi-test AppSim run can tell install vs runner-wait vs session-block vs deadlock (co2 feedback).
0.40.0 #
connect(maxMounted: …)— the realm's mounted-workspace budget (LRU park/remount above it); useful on memory-constrained devices holding many local workspaces.- MULTI-WORKSPACE BY DEFAULT IN TESTS:
NomosTestHarness.ephemeralnow connects a DECOY session alongside the workspace under test, andharness.bridgeis aNomosSessionHANDLE pinned to it (existing tenant tests work unchanged). Sole-session inference therefore never silently passes under the harness — an op that forgot its session refuses in your first test with the samemultiple sessions connected — pass sessiona real multi-workspace app raises. Opt out withdecoySession: false. NomosBridge.open(...)— connect + pinnedNomosSessionhandle in one call (final home = await bridge.open(workspace: …); HomeClient(home)): the recommended plane/handle shape; the bare bridge methods remain one-workspace sugar.
0.39.0 #
- Multi-session compat surface:
watchCompatibilitytakes an optionalsession;NomosSessionpins its compat watch,compat, andonLawChangedto ITS workspace (per-sessionlawChangedscoping — previously a multi-session plane's compat verdict was whichever session synced last, and a session's compat watch refused on a >1-session plane).
0.38.0 #
- SPLIT: the pure data core (wire types, offer codec, NomosReads, aggregate meta, schema validation, error info) moved to the new
nomos_typespackage;nomos_clientdepends on and re-exports it, so existing imports are unchanged. Frontend/UI code can now depend onnomos_typesalone.
0.37.1 #
- Doc fix:
NomosBridge.attestedReaddocs now match the runtime — the call answers{ entry: {queryId, result, attestation: …} }; passresult['entry']as oneofferDirectiveattestationselement.
0.32.0 #
- SPATIAL READS:
NomosBbox+NomosBridge.spatialWithin(spatialId, bbox)+watchSpatial(...)— the R*Tree probe surfaces on the bridge; generated clients (tooling ≥0.46) emit typedsitesByBounds({required NomosBbox bbox})+ watch accessors. - Analyzer-clean under strict lints (curly-braces rule) — the two remaining unbraced ifs in the bridge are gone.
0.31.0 #
NomosFieldMeta.fromBirth— the registry surfaces BIRTH-PRESENCE LAW (.fromBirth()fields, tooling ≥0.42): a gate invariant guarantees the field present on every row, and the generated read models type it non-nullable.
0.30.0 #
- RUNTIME AGGREGATE METADATA:
NomosAggregateMeta/NomosFieldMeta/mergeAggregateMeta(src/aggregate_meta.dart) — the support types for the generated per-domainconst Map<String, NomosAggregateMeta> <domain>AggregateMetaregistry (nomos-compile≥0.41 tooling). Generic surfaces (history/audit UIs, op renderers, in-app agents) resolveNomosAggregateMeta.typeOfId(op.aggregate)→ field kinds, enum wire values, VO/variant names, and the typedfromJsondecoder — the compiler's knowledge emitted as data, derived from the law's own declarations.
0.29.0 #
- LAW-MINTED IDS RETURN TO THE CALLER:
NomosBridge.offerCreates(...)→NomosOfferOutcome{head, created}— a.createsplan mints its aggregate id inside the sealed intent (payloads never carry one); the offer now hands the minted ids back, so generated create methods return the typed id with no query-after round-trip. New typesNomosOfferOutcome/NomosCreated. NomosBridge.mintId(typeTag)— reserve a kernel-minted typed id (<TypeTag>_<uuidv7>) via the holon's front-door mint, for app-side references. (.createspayloads still carry NO id — the law mints those.)- Generated Dart clients (
nomos-compile≥0.38 tooling):.creates(...)directive methods now returnFuture<NomosOfferOutcome>instead ofFuture<String>—outcome.created.single.idis the new aggregate's typed id.
0.28.0 #
NomosTestHarness(nomos_headless.dart): ephemeral real-law fixtures — one call births a throwaway cloud workspace, deploys compiled*.deploy.jsonlaw, and hands out independent client replicas (connect(clientId:)) over the node runner. Identity defaults to thegitholon login --agentsession (~/.holon/credentials.json). Live-proven: birth → deploy → write on one replica → converge + typed read on another, 14s end-to-end.- HEADLESS TRANSPORT (
package:nomos_client/nomos_headless.dart):NodeRunnerTransport— aBridgeTransportover the@githolon/clientnode runner (runner/node-entry.mjs) as a plain child process (NDJSON stdio).flutter test/dart test/ CI drive the REAL githolon (byte-identical wasm, real ledger, real gate) throughNomosBridge+ the generated typed clients — no Flutter plugins, no WebView, no assets. Requiresnodeon PATH + a resolvable@githolon/client(auto-resolved from the app's node_modules, or passentry:). Proven end-to-end: connect → offerDirective → sync(admit) → typed query, and the same test green under bothdart testandflutter test.
0.27.0 #
- TYPED SNAPSHOT RECOVERY (corrupt local custody):
NomosBridge.connect(recover: true)recovers IN-PLACE from a corrupt restoreFrom snapshot — salvages local-only authored writes (via the fallibleintents_above, which stops at a missing-ancestor gap) + the DLQ, refolds FRESH from cloud, re-offers the salvaged work (deduped), re-queues the DLQ. The report ridesbridge.lastRecovery={salvagedWrites, requeuedDeadLetters, unsalvageable}— a write the current law refuses lands inunsalvageable+ the DLQ (surfaced, never dropped). Alsoholon.salvage()/holon.absorbSalvage(). Closes the restoreFrom-leaves-read-model-empty case.
0.26.0 #
- TIER-2 SYNC SIZE:
NomosBridge.syncSize()→{bytes, kind}— how many bytes this workspace would transfer to catch up, WITHOUT downloading (a HEAD on the serving pack; the host answers Content-Length, cached ~15s). Sum across open workspaces for an aggregate "X MB to sync" total before any download.
0.25.0 #
- SYNC STATE + REAL LOADING BARS:
NomosBridgegainssyncStatus(Stream
0.24.0 #
createWorkspace/shareWithno longer requireauthorSecret— it defaults to the connection's signing key (the home device keyNomosScope.homeloaded). A frontend dev never threads a key through make-workspace or share.
0.23.0 #
NomosBridge.shareWith— one-call cross-custody share (sign quote + deliver recordShare to the subjects home). Closes the shared-with-me loop.
0.22.0 #
NomosBridge.offerIntent(canonical write verb;offerDirectivekept as alias) + one-callNomosBridge.createWorkspace(sign + relay a control-plane offer).
0.21.0 #
NomosBridge.noteLocalSpan(...)— inject a locally-measured span (e.g. the Dart-side durable save, the "saved to disk" number) into the span stream so it appears on the flame chart AND the per-phase stats exactly like a kernel span. Additive; used bynomos_flutter's durable-save-on-write.
0.20.2 #
NomosBridge.connectaccepts the internalallowUnbornopt-in used byNomosScope.home, so the home-birth ceremony can boot a local bridge before the home workspace has a remote main. The default remains strict for ordinary workspaces.
0.20.1 #
NomosBridgeErrornow carries structuredNomosErrorInfoalongside the existing human-readablemessage. The envelope includes stable code/component/operation fields, workspace/domain/directive context, trace/span ids, arbitrary attributes, andtoTelemetryAttributes()for future OpenTelemetry export without taking an SDK dependency.- Every bridge request now carries an OpenTelemetry-shaped trace context. String-only legacy runner errors still work and are upgraded locally with operation/trace metadata.
0.20.0 #
- Authority-aware:
NomosBridge.offerDirective(domain, directiveId, payload, {actor, domainHash})— generated clients route every offer through THE ONE encoder (encodeIntentOfferBytesin @githolon/client); no per-client envelope encoding. New typedMissingOfferAuthority— a.requires(...)directive authored with no actor throws BEFORE submit (an actorless gated offer cannot be generated). Lockstep jump to 0.20.0.
0.17.0 #
- Lockstep bump with the birth-primitive release (see
@githolon/dsl0.17.0): birth is one law primitive (birthChild), the platform-creator tier collapsed onto#creator,grantCreationtakes a user or key subject. The Dart wire types track the current /v2 governance surface.
0.16.0 #
- First pub.dev release: kernel wire types,
NomosBridgeprotocol, typed offer/query/watch surface.