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
- Argument 1:
RunOverrides overrides (required, including zero/false/empty)
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
- Argument 1:
string expected_revision (required, including zero/false/empty)
- Argument 2:
UserSettings values (required, including zero/false/empty)
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
- Argument 1:
RunOverrides overrides (required, including zero/false/empty)
- Argument 2:
string cursor (required, including zero/false/empty)
- Argument 3:
i64 wait_ms (required, including zero/false/empty)
Encoding [DEF-E1]
| setting | value | rule |
escape | minimal | [DEF-E2] |
indent | 2 | [DEF-E3] |
map_keys | utf8-bytes | [DEF-E4] |
numbers | integer-decimal | [DEF-E5] |
opaque | verbatim | [DEF-E6] |
terminator | newline | [DEF-E7] |
duplicate_keys | last | [DEF-E8] |
depth_limit | 64 | [DEF-E9] |
Types
| kind | types |
| built in | ConfigObservationOutcome UserReplaceOutcome string |
| declared below | Origin 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
| id | field | type | presence | named elsewhere |
| 1 | nas_store | string | required | — |
| 2 | store | string | required | — |
| 3 | log_sink | string | required | — |
| 4 | log_service | string | required | — |
Origin
unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | rung | string | required | — |
| 2 | path | string | required | — |
Origins
unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | nas_store | Origin | required | — |
| 2 | store | Origin | required | — |
| 3 | log_sink | Origin | required | — |
| 4 | log_service | Origin | required | — |
| 5 | off | Origin | required | — |
Snapshot
the document [DEF-A1] · unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | nas_store | string | required | — |
| 2 | store | string | required | — |
| 3 | log_sink | string | required | — |
| 4 | log_service | string | required | — |
| 5 | off | map<string,string> | required | — |
| 6 | origins | Origins | required | — |
| 7 | stamp | string | required | — |
UserSettings
unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | nas_store | string | required | — |
| 2 | store | string | required | — |
| 3 | log_sink | string | required | — |
| 4 | log_service | string | required | — |
| 5 | off | map<string,string> | required | — |
UserSnapshot
unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | values | UserSettings | required | — |
| 2 | revision | string | required | — |
UserReplaceResult
unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | outcome | UserReplaceOutcome | required | — |
| 2 | snapshot | UserSnapshot | required | — |
ConfigObservation
unknown fields refuse
| id | field | type | presence | named elsewhere |
| 1 | outcome | ConfigObservationOutcome | required | — |
| 2 | cursor | string | required | — |
| 3 | snapshot | Snapshot | optional · 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
| id | member | wire |
| 1 | applied | applied |
| 2 | conflict | conflict |
| 3 | forbidden | forbidden |
| 4 | unavailable | unavailable |
ConfigObservationOutcome
a member this reader does not know is refuse
| id | member | wire |
| 1 | snapshot | snapshot |
| 2 | unchanged | unchanged |
| 3 | gap | gap |
| 4 | unavailable | unavailable |
| 5 | unsupported | unsupported |
| 6 | invalid | invalid |
Constants [DEF-A6]
| name | type | value |
reader_error_codes | list<string> | storage_unavailable, caller_unavailable, identity_required, wrong_user |
editor_error_codes | list<string> | invalid_revision, storage_unavailable, caller_unavailable, identity_required, wrong_user |
Refusal words [DEF-R1]
| order | word | stage |
| 1 | malformed | grammar |
| 2 | bad_string | grammar |
| 3 | number_spelling | grammar |
| 4 | wrong_type | grammar |
| 5 | depth_exceeded | grammar |
| 6 | duplicate_field | structure |
| 7 | unknown_field | structure |
| 8 | missing_field | structure |
| 9 | bad_enum | structure |
| 10 | trailing_bytes | document |