Schema

Use this reference to inspect fields, methods, accepted values and failure outcomes. For setup and working examples, start with the API guide.

Definition: abstraction.config

Service ConfigReader [DEF-S1]

Per-user configuration read service. Caller identity is checked independently of overrides.

Wire identity: abstraction.config/reader@1

Handler error codes, declared by reader_error_codes: storage_unavailable, caller_unavailable, identity_required, wrong_user. Generated bindings name each as a ServiceErrorCode member beside the dispatcher's own codes.

Multiple services share this namespace. Generated ServiceName (Go) and service_name (C++/Python) validate the request envelope and version before returning its service identity for routing. The selected generated dispatcher validates the method and typed arguments; the selector does not authorize callers or interpret method payloads.

Frames carry version, service, method and typed arguments. Transport owns framing, associated exchanges, deadlines and connections. Unknown version/service/method and malformed arguments are rejected before invoking a handler. One-way WriteFrame success means local submission, not remote acceptance or persistence.

Request-response methods use ExchangeFrame. Replies carry version, service, method, ok and payload; success payload contains typed value (or an empty object for void). Error payload contains nonempty code and message, which may be empty. ServiceError preserves unknown codes. Unexpected handler failures become handler_error without private details; invalid results become invalid_result. Clients validate reply identity and result before exposing it. A malformed frame or transport failure remains a local error; the transport must associate each response with its exchange. C++ dispatchers are pure protocol bindings, not listening servers.

Read same-user machine/user configuration with explicit caller run overrides. No writes, watch or provider fallback.

Read

request-response Snapshot

Service ConfigEditor [DEF-S1]

Same-account Program-proven user editor on the config endpoint. The service selects its private user path once. Caller claims cannot grant authority; forbidden callers cause no storage access. Existing machine and run rungs are unaffected.

Wire identity: abstraction.config/editor@1

Handler error codes, declared by editor_error_codes: invalid_revision, storage_unavailable, caller_unavailable, identity_required, wrong_user. Generated bindings name each as a ServiceErrorCode member beside the dispatcher's own codes.

Multiple services share this namespace. Generated ServiceName (Go) and service_name (C++/Python) validate the request envelope and version before returning its service identity for routing. The selected generated dispatcher validates the method and typed arguments; the selector does not authorize callers or interpret method payloads.

Frames carry version, service, method and typed arguments. Transport owns framing, associated exchanges, deadlines and connections. Unknown version/service/method and malformed arguments are rejected before invoking a handler. One-way WriteFrame success means local submission, not remote acceptance or persistence.

Request-response methods use ExchangeFrame. Replies carry version, service, method, ok and payload; success payload contains typed value (or an empty object for void). Error payload contains nonempty code and message, which may be empty. ServiceError preserves unknown codes. Unexpected handler failures become handler_error without private details; invalid results become invalid_result. Clients validate reply identity and result before exposing it. A malformed frame or transport failure remains a local error; the transport must associate each response with its exchange. C++ dispatchers are pure protocol bindings, not listening servers.

Read only the authenticated service user's persisted rung. No environment or machine merge. Missing storage is empty; corrupt, unsupported or unavailable storage returns storage_unavailable.

ReadUser

request-response UserSnapshot

Compare the opaque revision and replace atomically through the selected conditional-write store. Stale revision returns conflict. Empty revision is invalid_revision. Storage failures return storage_unavailable. A configured edit policy is evaluated after same-account proof and before storage access: refusal returns forbidden and a failed decision returns unavailable. A canceled wait leaves write outcome unresolved; reread rather than blindly retry.

ReplaceUser

request-response UserReplaceResult

Service ConfigObserver [DEF-S1]

Same-account latest-snapshot long-poll observation over a provider's explicit change notification source.

Wire identity: abstraction.config/observer@1

Multiple services share this namespace. Generated ServiceName (Go) and service_name (C++/Python) validate the request envelope and version before returning its service identity for routing. The selected generated dispatcher validates the method and typed arguments; the selector does not authorize callers or interpret method payloads.

Frames carry version, service, method and typed arguments. Transport owns framing, associated exchanges, deadlines and connections. Unknown version/service/method and malformed arguments are rejected before invoking a handler. One-way WriteFrame success means local submission, not remote acceptance or persistence.

Request-response methods use ExchangeFrame. Replies carry version, service, method, ok and payload; success payload contains typed value (or an empty object for void). Error payload contains nonempty code and message, which may be empty. ServiceError preserves unknown codes. Unexpected handler failures become handler_error without private details; invalid results become invalid_result. Clients validate reply identity and result before exposing it. A malformed frame or transport failure remains a local error; the transport must associate each response with its exchange. C++ dispatchers are pure protocol bindings, not listening servers.

Empty cursor reads the current snapshot. At the same revision, wait at most wait_ms (0..30000) for provider invalidation; reread on expiry. Cursor is at most 512 UTF-8 bytes and each override at most 4096 bytes. A slow consumer receives the latest revision; revisions include values and provenance. Missing change notification support gives unsupported. Bounded waiter exhaustion or provider notification failure gives unavailable. Caller cancellation stops observation waiting only; setting mutations retain their own lifetimes. Receiving account authority is rechecked before returning data.

Observe

request-response ConfigObservation

Encoding [DEF-E1]

settingvaluerule
escapeminimal[DEF-E2]
indent2[DEF-E3]
map_keysutf8-bytes[DEF-E4]
numbersinteger-decimal[DEF-E5]
opaqueverbatim[DEF-E6]
terminatornewline[DEF-E7]
duplicate_keyslast[DEF-E8]
depth_limit64[DEF-E9]

Types

kindtypes
built inConfigObservationOutcome UserReplaceOutcome string
declared belowOrigin Origins Snapshot UserSettings UserSnapshot
string map [DEF-A10]map<string,string>

Structs [DEF-T1]

A field is required, or says when it is omitted [DEF-A4]. Each struct says on its own what it does with a field name it has never heard of [DEF-A7]. A wire name never moves; where a language must spell it differently the field says so [DEF-A2].

RunOverrides

unknown fields refuse

idfieldtypepresencenamed elsewhere
1nas_storestringrequired—
2storestringrequired—
3log_sinkstringrequired—
4log_servicestringrequired—

Origin

unknown fields refuse

idfieldtypepresencenamed elsewhere
1rungstringrequired—
2pathstringrequired—

Origins

unknown fields refuse

idfieldtypepresencenamed elsewhere
1nas_storeOriginrequired—
2storeOriginrequired—
3log_sinkOriginrequired—
4log_serviceOriginrequired—
5offOriginrequired—

Snapshot

the document [DEF-A1] · unknown fields refuse

idfieldtypepresencenamed elsewhere
1nas_storestringrequired—
2storestringrequired—
3log_sinkstringrequired—
4log_servicestringrequired—
5offmap<string,string>required—
6originsOriginsrequired—
7stampstringrequired—

UserSettings

unknown fields refuse

idfieldtypepresencenamed elsewhere
1nas_storestringrequired—
2storestringrequired—
3log_sinkstringrequired—
4log_servicestringrequired—
5offmap<string,string>required—

UserSnapshot

unknown fields refuse

idfieldtypepresencenamed elsewhere
1valuesUserSettingsrequired—
2revisionstringrequired—

UserReplaceResult

unknown fields refuse

idfieldtypepresencenamed elsewhere
1outcomeUserReplaceOutcomerequired—
2snapshotUserSnapshotrequired—

ConfigObservation

unknown fields refuse

idfieldtypepresencenamed elsewhere
1outcomeConfigObservationOutcomerequired—
2cursorstringrequired—
3snapshotSnapshotoptional · omitted when absent—

Enumerations [DEF-T5]

Enum fields carry JSON strings containing exact member wire spellings, never numeric IDs. Unknown names are preserved with grant and refused as bad_enum with refuse on read and write. Optional absent fields preserve presence separately from an empty string.

An enumeration is a closed vocabulary of wire names, and each one says on its own what a reader does with a member it has never heard of [DEF-A5].

UserReplaceOutcome

a member this reader does not know is refuse

idmemberwire
1appliedapplied
2conflictconflict
3forbiddenforbidden
4unavailableunavailable

ConfigObservationOutcome

a member this reader does not know is refuse

idmemberwire
1snapshotsnapshot
2unchangedunchanged
3gapgap
4unavailableunavailable
5unsupportedunsupported
6invalidinvalid

Constants [DEF-A6]

nametypevalue
reader_error_codeslist<string>storage_unavailable, caller_unavailable, identity_required, wrong_user
editor_error_codeslist<string>invalid_revision, storage_unavailable, caller_unavailable, identity_required, wrong_user

Refusal words [DEF-R1]

orderwordstage
1malformedgrammar
2bad_stringgrammar
3number_spellinggrammar
4wrong_typegrammar
5depth_exceededgrammar
6duplicate_fieldstructure
7unknown_fieldstructure
8missing_fieldstructure
9bad_enumstructure
10trailing_bytesdocument