@reventlessdev/reventless-spec 3.0.0-alpha.83 → 3.0.0-alpha.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,13 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # 3.0.0-alpha.84 (2026-07-29)
7
+
8
+ ### Features
9
+
10
+ * **plugin:** why a read model is named by that field ([699ef8e](https://github.com/ReventlessDev/reventless-core/commit/699ef8e72f1b1d82fb04672739e5e4a8db61ae9a))
11
+
12
+
6
13
  # 3.0.0-alpha.83 (2026-07-28)
7
14
 
8
15
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reventlessdev/reventless-spec",
3
- "version": "3.0.0-alpha.83",
3
+ "version": "3.0.0-alpha.84",
4
4
  "description": "Specifications for Reventless",
5
5
  "license": "Apache-2.0",
6
6
  "bin": {
@@ -218,6 +218,26 @@ type queryableDef = {
218
218
  */
219
219
  searchableFields: array<string>,
220
220
  /**
221
+ Which rung of the `labelField` ladder produced it, so a consumer with a name
222
+ rule of its own can tell a declaration from a guess before ranking the two:
223
+
224
+ - `"annotation"` — a `@displayName` spec. The author said which field names the
225
+ record; nothing a client infers locally outranks it.
226
+ - `"convention"` — a field literally named `name`/`title`/`label`/`displayName`.
227
+ A guess, and the one guess a client can independently arrive at.
228
+ - `"position"` — the first candidate in declaration order. A guess, and a fact
229
+ only this side knows; a client's own conventional-name rule is the better
230
+ answer where the two differ.
231
+ - `"fallback"` — no candidate at all, so `labelField` is `"id"`. The state
232
+ saying it has no human-readable field.
233
+
234
+ `None` means not stated — defs persisted before this field existed, and
235
+ hand-rolled defs that decline to say. Distinct from `Some("fallback")`, which
236
+ is this side stating that it looked. js_nullable for the same JSON-safety
237
+ reason as `statusField`.
238
+ */
239
+ labelFieldSource: @s.matches(stringOptionSchema) option<string>,
240
+ /**
221
241
  Name of the state field whose value identifies the row's lifecycle status, used
222
242
  by AutoUI together with `commandDef.allowedStates` to filter the per-row command
223
243
  menu. Resolution order (codegen): (1) field annotated `@status`; (2) a field
@@ -114,6 +114,7 @@ let queryableDefSchema = S.schema(s => ({
114
114
  linkedWriteSide: s.m(S.array(S.string)),
115
115
  labelField: s.m(S.string),
116
116
  searchableFields: s.m(S.array(S.string)),
117
+ labelFieldSource: s.m(stringOptionSchema),
117
118
  statusField: s.m(stringOptionSchema),
118
119
  visibility: s.m(stringOptionSchema),
119
120
  chapter: s.m(stringOptionSchema)