Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,14 @@ Historically, before the above guidance was established - in particular around _
This left us open to the problem that client library references to spec items could end up semantically invalid if that spec point was re-used later.
For example, if `XXX1a` and `XXX1c` exist but `XXX1b` doesn’t because it was removed in the past (prior to this guidance being established), then we should introduce `XXX1d` for the new spec item rather than re-using `XXX1b`.

## Public-API namespacing for name clashes

Most spec types are public API by default (the IDL marks the exceptions with `internal`). When a public-API type would have the same natural name as an existing internal/wire concept, the first preference is to rename the internal concept so the public type can take the unqualified name. Where no good rename exists for the internal concept, or where renaming it would cause excessive churn or inconsistency across the spec, the spec instead qualifies the public type with a `PublicAPI::` namespace prefix (e.g. `PublicAPI::ObjectMessage`).

This is purely a spec-side disambiguation: SDKs should expose the type to users under its unqualified name (here, `ObjectMessage`). Where an SDK's language uses a single flat namespace and cannot have two types with that name, the canonical/wire concept may be renamed internally (e.g. `WireObjectMessage`) to free up the public name.

The `PublicAPI::` prefix is only introduced when there is an actual clash; the bare name remains the canonical reference everywhere else.

## SDK API docstrings

The `api-docstrings.md` file is a set of language-agnostic reference API commentaries for SDK developers to use when adding docstring comments to Ably SDKs. For new fields, this file should be modified in the same PR that makes the spec changes for those fields.
Expand Down
16 changes: 13 additions & 3 deletions specifications/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -939,7 +939,7 @@ The threading and/or asynchronous model for each realtime library will vary by l

### RealtimeObject {#realtime-objects}

Reserved for `RealtimeObject` feature specification, see [objects-features](../objects-features). Reserved spec points: `RTO`, `RTLO`, `RTLC`, `RTLM`
Reserved for `RealtimeObject` feature specification, see [objects-features](../objects-features). Reserved spec points: `RTO`, `RTLO`, `RTLC`, `RTLM`, `RTPO`, `RTINS`, `RTLCV`, `RTLMV`

### RealtimeAnnotations {#realtime-annotations}

Expand Down Expand Up @@ -1331,13 +1331,13 @@ The core SDK provides an API for wrapper SDKs to supply Ably with analytics info
- `(OOP4g)` The size is the sum of the sizes of the map create, `mapSet`, `mapRemove`, counter create, and `counterInc` components
- `(OOP4h)` The size of the map create component is:
- `(OOP4h1)` If `mapCreate` is present, it is equal to the size of `mapCreate` calculated per [MCR3](#MCR3)
- `(OOP4h2)` Else if `mapCreateWithObjectId` is present, it is equal to the size of the `MapCreate` retained in [RTO11f18](objects-features#RTO11f18), calculated per [MCR3](#MCR3)
- `(OOP4h2)` Else if `mapCreateWithObjectId` is present, it is equal to the size of the `MapCreate` retained in [RTLMV4j5](objects-features#RTLMV4j5), calculated per [MCR3](#MCR3)
- `(OOP4h3)` Otherwise it is zero
- `(OOP4i)` The size of the `mapSet` property is calculated per [MST3](#MST3)
- `(OOP4j)` The size of the `mapRemove` property is calculated per [MRM3](#MRM3)
- `(OOP4k)` The size of the counter create component is:
- `(OOP4k1)` If `counterCreate` is present, it is equal to the size of `counterCreate` calculated per [CCR3](#CCR3)
- `(OOP4k2)` Else if `counterCreateWithObjectId` is present, it is equal to the size of the `CounterCreate` retained in [RTO12f16](objects-features#RTO12f16), calculated per [CCR3](#CCR3)
- `(OOP4k2)` Else if `counterCreateWithObjectId` is present, it is equal to the size of the `CounterCreate` retained in [RTLCV4g5](objects-features#RTLCV4g5), calculated per [CCR3](#CCR3)
- `(OOP4k3)` Otherwise it is zero
- `(OOP4l)` The size of the `counterInc` property is calculated per [CIN3](#CIN3)
- `(OOP4f)` The size of a `null` or omitted property is zero
Expand Down Expand Up @@ -1870,6 +1870,13 @@ The core SDK provides an API for wrapper SDKs to supply Ably with analytics info
- `(REX2b1)` Should be written in reverse domain name notation
- `(REX2b2)` Types beginning with `com.ably.` are reserved

#### Subscription

- `(SUB1)` A `Subscription` represents a registration for receiving events from a subscribe operation
- `(SUB2)` The `Subscription` object has the following method:
- `(SUB2a)` `unsubscribe` - deregisters the listener that was registered by the corresponding `subscribe` call. Once `unsubscribe` is called, the listener must not be called for any subsequent events
- `(SUB2b)` Calling `unsubscribe` more than once is a no-op

### Option types {#options}

#### ClientOptions
Expand Down Expand Up @@ -2924,6 +2931,9 @@ Each type, method, and attribute is labelled with the name of one or more clause
description: string? // TM2s4
metadata: Dict<string, string>? //TM2s5

interface Subscription: // SUB*
unsubscribe() // SUB2a

## Old specs

Use the version navigation to view older versions. References to diffs for each version are maintained below:
Expand Down
Loading
Loading