@ai-matrx/records 0.44.1 → 0.46.0

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/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { U as Uuid, T as TableType, a as TableDisplay, S as StorageMode, g as Timestamp, aw as TableOrigin, h as RecordDocument, m as StoredRecord, l as Field, a7 as ParityFieldType, am as RuleUse, al as RuleNodeKind, R as RelationFlavor, O as OnDelete, ai as RelationBinding, f as RelationCardinality, a1 as MergeFieldSource, a0 as MergeFieldSemanticType, $ as MergeFieldModifier, a4 as OverridePolicy, B as Delivery, M as Freshness, x as Actor, P as PgError } from './field-D0Rr4Cqb.cjs';
2
- export { A as ABSENCE_REASONS, v as ACTOR_VOCABULARY, w as AbsenceReason, y as COMPUTE_ON, z as CONTEXT_POLICIES, C as ComputeOn, e as ContextPolicy, D as DELIVERIES, E as ENTITY_TOKENS, G as EntityToken, H as FIELD_SENSITIVITIES, I as FIELD_SOURCES, J as FRESHNESS, K as FieldBehavior, n as FieldPatch, q as FieldProposal, c as FieldRule, d as FieldSensitivity, b as FieldSource, F as FieldTypeWord, L as ForbiddenEnvelopeWord, Q as HiddenFieldNotice, V as KERNEL_TABLES, X as KernelTableName, Y as MERGE_FIELD_MODIFIERS, Z as MERGE_FIELD_SEMANTIC_TYPES, _ as MERGE_FIELD_SOURCES, N as NewFieldDeclaration, a2 as ON_DELETE, a3 as OVERRIDE_POLICIES, a5 as PARITY_FIELD_TYPES, a6 as PER_VALUE_ACCESS_WORDS, a8 as ParityFieldTypeDescriptor, a9 as PerValueAccessWord, u as PredictedRefusal, aa as ProvenancePointer, ab as RELATION_BINDINGS, ac as RELATION_CARDINALITIES, ad as RELATION_FLAVORS, ae as RETIRED_ACTOR_WORDS, af as RULE_NODE_KINDS, ag as RULE_USES, k as ReadRow, p as ReadValue, j as RecordRead, o as RecordRevision, s as RecordsError, ah as RecordsErrorCode, i as RecordsResult, aj as RelationDisplay, ak as RetiredActorWord, an as STORAGE_MODES, ao as STORE_DOORS, ap as STORE_KNOBS, aq as STORE_REFUSAL_CODES, t as StaleWriteDetail, ar as StoreDoorName, as as StoreRefusalCode, at as TABLE_DISPLAYS, au as TABLE_ORIGINS, av as TABLE_TYPES, r as TableProposal, ax as VALUE_ALTERNATE_KEYS, ay as VALUE_ENVELOPE_KEYS, az as ValueAlternate, aA as ValueAlternateKey, aB as ValueEnvelope, aC as ValueEnvelopeKey, aD as ValueSource, W as WriteConflict, aE as err, aF as isRecordsErr, aG as ok } from './field-D0Rr4Cqb.cjs';
1
+ import { U as Uuid, T as TableType, a as TableDisplay, S as StorageMode, g as Timestamp, aw as TableOrigin, h as RecordDocument, m as StoredRecord, l as Field, a7 as ParityFieldType, am as RuleUse, al as RuleNodeKind, R as RelationFlavor, O as OnDelete, ai as RelationBinding, f as RelationCardinality, a1 as MergeFieldSource, a0 as MergeFieldSemanticType, $ as MergeFieldModifier, a4 as OverridePolicy, B as Delivery, M as Freshness, x as Actor, P as PgError } from './field-N0ExInZA.cjs';
2
+ export { A as ABSENCE_REASONS, v as ACTOR_VOCABULARY, w as AbsenceReason, y as COMPUTE_ON, z as CONTEXT_POLICIES, C as ComputeOn, e as ContextPolicy, D as DELIVERIES, E as ENTITY_TOKENS, G as EntityToken, H as FIELD_SENSITIVITIES, I as FIELD_SOURCES, J as FRESHNESS, K as FieldBehavior, n as FieldPatch, q as FieldProposal, c as FieldRule, d as FieldSensitivity, b as FieldSource, F as FieldTypeWord, L as ForbiddenEnvelopeWord, Q as HiddenFieldNotice, V as KERNEL_TABLES, X as KernelTableName, Y as MERGE_FIELD_MODIFIERS, Z as MERGE_FIELD_SEMANTIC_TYPES, _ as MERGE_FIELD_SOURCES, N as NewFieldDeclaration, a2 as ON_DELETE, a3 as OVERRIDE_POLICIES, a5 as PARITY_FIELD_TYPES, a6 as PER_VALUE_ACCESS_WORDS, a8 as ParityFieldTypeDescriptor, a9 as PerValueAccessWord, u as PredictedRefusal, aa as ProvenancePointer, ab as RELATION_BINDINGS, ac as RELATION_CARDINALITIES, ad as RELATION_FLAVORS, ae as RETIRED_ACTOR_WORDS, af as RULE_NODE_KINDS, ag as RULE_USES, k as ReadRow, p as ReadValue, j as RecordRead, o as RecordRevision, s as RecordsError, ah as RecordsErrorCode, i as RecordsResult, aj as RelationDisplay, ak as RetiredActorWord, an as STORAGE_MODES, ao as STORE_DOORS, ap as STORE_KNOBS, aq as STORE_REFUSAL_CODES, t as StaleWriteDetail, ar as StoreDoorName, as as StoreRefusalCode, at as TABLE_DISPLAYS, au as TABLE_ORIGINS, av as TABLE_TYPES, r as TableProposal, ax as VALUE_ALTERNATE_KEYS, ay as VALUE_ENVELOPE_KEYS, az as ValueAlternate, aA as ValueAlternateKey, aB as ValueEnvelope, aC as ValueEnvelopeKey, aD as ValueSource, W as WriteConflict, aE as err, aF as isRecordsErr, aG as ok } from './field-N0ExInZA.cjs';
3
3
 
4
4
  /** `public.permission_level`, in the store's own order. */
5
5
  type PermissionLevel = "viewer" | "commenter" | "editor" | "admin";
@@ -153,6 +153,129 @@ declare function holdsARetiredChoice(document: RecordDocument | undefined, field
153
153
  /** True when a token looks like a uuid — which a choice value is no longer allowed to be. */
154
154
  declare function looksLikeAnId(value: unknown): boolean;
155
155
 
156
+ /**
157
+ * EVERYTHING THIS FILE NEEDS TO KNOW ABOUT A FIELD, AND NOTHING ELSE.
158
+ *
159
+ * A full `Field` satisfies it, and so does every narrower shape the store
160
+ * hands to a screen — `CaptureField` on a phone with no network, the Field
161
+ * documents `custom.form_public` and `custom.booking_public` publish to a
162
+ * stranger. Asking for the whole `Field` would have meant the capture sheet
163
+ * keeping its own `Number(raw)`, which is exactly the duplication this file
164
+ * exists to end.
165
+ */
166
+ interface CoercibleField {
167
+ /** Named so the doc above is checkable: a full {@link Field} satisfies this. */
168
+ key: string;
169
+ label?: string | null;
170
+ name?: string | null;
171
+ /** FLD-1. One of five behaviours; an unknown word is treated as text. */
172
+ type?: string | null;
173
+ multi?: boolean | null;
174
+ unit?: string | null;
175
+ format?: string | null;
176
+ config?: Record<string, unknown> | null | undefined;
177
+ relation_target?: string | null;
178
+ }
179
+ /**
180
+ * The kind of value one Field holds, resolved from its DECLARATION only — the
181
+ * behaviour, the modifiers, the format, the relation target and the config,
182
+ * because those are what the store stores. A screen that guessed from a value
183
+ * would answer differently for an empty record.
184
+ *
185
+ * `plain_text`, `long_text`, `number` and `boolean` are behaviours that carry
186
+ * no parity type of their own; every other word here is a parity type.
187
+ */
188
+ declare const FIELD_KINDS: readonly ["attachment", "checkbox", "currency", "datetime", "email", "formula", "json", "long_text", "lookup", "member", "multi_select", "number", "percent", "phone", "relation", "rollup", "select", "text", "url"];
189
+ /**
190
+ * 🚨 THE UNION IS DERIVED FROM THE LIST ABOVE, and the list is what the
191
+ * coverage test walks. Add a kind here and the test drives it; give it no arm
192
+ * in `coerceTypedAnswer` and the test says so, instead of the new kind falling
193
+ * quietly through `default:` and a value of the wrong shape reaching the store
194
+ * — which is the whole defect this file closes.
195
+ */
196
+ type FieldKind = (typeof FIELD_KINDS)[number];
197
+ /** The kernel Table ids REC-31 pins the two special relations to. */
198
+ interface KernelTargets {
199
+ /** The kernel `File` Table — a relation pointing here is an attachment. */
200
+ file?: string | undefined;
201
+ /** The kernel `Person` Table — a relation pointing here names a person. */
202
+ person?: string | undefined;
203
+ }
204
+ /**
205
+ * Which kind of value this Field holds.
206
+ *
207
+ * This is the ONE classifier. `@ai-matrx/records-ui`'s `editorKindFor` — which
208
+ * decides which editor to DRAW — delegates to it, so the editor a person types
209
+ * into and the coercion applied to what they typed can never disagree about
210
+ * the same column. They did disagree before this moved here; that is the whole
211
+ * class of grid defect September was spent closing.
212
+ */
213
+ declare function fieldKindFor(field: CoercibleField, kernel?: KernelTargets): FieldKind;
214
+ /** One Field's options, indexed the way a typed word has to be looked up. */
215
+ interface ChoiceOptions {
216
+ /**
217
+ * Lower-cased label, option key and option id, each pointing at the OPTION
218
+ * RECORD'S ID — which is what a list Field stores (FLD-5/FLD-6).
219
+ */
220
+ byWord: Map<string, string>;
221
+ /** The labels, in order, so a refusal can say what is on offer. */
222
+ labels: string[];
223
+ }
224
+ /** What one answer became, or the sentence saying why it did not. */
225
+ type Coerced = {
226
+ value: unknown;
227
+ } | {
228
+ refusal: string;
229
+ unmatched?: string[];
230
+ };
231
+ interface CoerceOptions {
232
+ /** This Field's choices, when the caller has loaded them. */
233
+ options?: ChoiceOptions | undefined;
234
+ /** The kernel File/Person Table ids, for classifying relations. */
235
+ kernel?: KernelTargets | undefined;
236
+ /**
237
+ * The Field's name as this caller writes it. Defaults to the Field's own
238
+ * label. A screen passes the same words it printed above the box.
239
+ */
240
+ label?: string | undefined;
241
+ }
242
+ /** The Field's name in plain words — never its key on a screen. */
243
+ declare function coercionLabel(field: CoercibleField): string;
244
+ /**
245
+ * Turn ONE typed-in string into the value this Field holds — or say, in a
246
+ * sentence a person can act on, why it is not one.
247
+ *
248
+ * An empty answer is `null` for every kind: a blank means "no answer here",
249
+ * and clearing a value is a thing a person means to do. Whether the Field may
250
+ * be blank is the store's question, asked with the Field's `required` and its
251
+ * Rules, not this one's.
252
+ */
253
+ declare function coerceTypedAnswer(field: CoercibleField, raw: string, opts?: CoerceOptions): Coerced;
254
+ /** What a whole set of typed-in answers became. */
255
+ interface CoercedAnswers {
256
+ /** Ready to send to the store. Only the keys that coerced cleanly. */
257
+ values: Record<string, unknown>;
258
+ /** Field key → the sentence saying why that answer was not written. */
259
+ refusals: Record<string, string>;
260
+ /** The field keys the caller sent that this table has no Field for. */
261
+ unknownKeys: string[];
262
+ }
263
+ /**
264
+ * Every typed-in answer on one screen, coerced together — the shape the two
265
+ * public doors and the import wizard actually need.
266
+ *
267
+ * Keys the table has no Field for are reported rather than dropped: the store
268
+ * refuses an unknown key by name and a caller that quietly deleted it would
269
+ * hide a real mismatch between a page and its table.
270
+ */
271
+ declare function coerceTypedAnswers(fields: readonly CoercibleField[], answers: Readonly<Record<string, unknown>>, opts?: {
272
+ kernel?: KernelTargets | undefined;
273
+ /** Choices per Field key, for the list columns. */
274
+ options?: ReadonlyMap<string, ChoiceOptions> | undefined;
275
+ /** Field key → the words that screen printed above the box. */
276
+ labels?: Readonly<Record<string, string>> | undefined;
277
+ }): CoercedAnswers;
278
+
156
279
  /** The seven table types. Only these two carry custom fields (REC-34, DD-011). */
157
280
  type CustomFieldTableType = "entity" | "detail";
158
281
  /** What `custom.entity_table` answers about a registry token. */
@@ -949,6 +1072,26 @@ interface PortalSummary {
949
1072
  sign_in_method: string;
950
1073
  opened_at: Timestamp | null;
951
1074
  }
1075
+ /**
1076
+ * ONE (portal, Table) PAIR, as `custom.portal_tables` reports it.
1077
+ *
1078
+ * 🚨 WHY THIS EXISTS (TAILS-3, 2026-09-21). The Portals rail sits on a Table's
1079
+ * page beside Forms, Bookings and Dashboards — all table-scoped — while
1080
+ * `custom.portals` takes no table at all. On Rincon Plumbing Co's **Parts**
1081
+ * table the rail read "Portals 10" and listed ten cards titled "Your jobs and
1082
+ * invoices", which belong to **Jobs**; the empty state never rendered, so the
1083
+ * "Build it / Ask an agent" offer was unreachable on EVERY table of any
1084
+ * organization that already had one portal.
1085
+ *
1086
+ * This is the whole of what a table-scoped rail needs: is the table I am
1087
+ * standing on in any portal, and if not, which portals could take it.
1088
+ */
1089
+ interface PortalTableRef {
1090
+ portal_id: Uuid;
1091
+ table_id: Uuid;
1092
+ /** That Table's name, so a rail never reads a second door to draw a row. */
1093
+ name: string;
1094
+ }
952
1095
  /** One Table a portal exposes, as `custom.portal_card` reports it. */
953
1096
  interface PortalTableExposure {
954
1097
  table_id: Uuid;
@@ -2894,4 +3037,4 @@ interface ConversationScopeContext {
2894
3037
  /** `About: Acme Industrial` — the chip a bound chat wears. */
2895
3038
  declare function scopeChip(scope: ConversationScope): string;
2896
3039
 
2897
- export { Actor, type AggregateBucket, type AggregateFilter, type AggregateMeasure, type AggregateOperation, type AggregateRow, type AggregateWindow, type AnonTokenBinding, type BookingAvailability, type BookingDeclared, type BookingSummary, type BookingWindow, type CaptureField, type CaptureFileRef, type CaptureOutcome, type CaptureQuestion, type CaptureQueue, type CaptureQueueCounts, type CaptureQueueOptions, type CaptureQueuePorts, type CaptureQueueStore, type CaptureSheetFace, type CaptureSheetSummary, type CaptureSyncReport, type ChecklistDeclared, type ChecklistRequirement, type ChecklistRequirementKind, type ChecklistRoleSpec, type ChecklistRunStarted, type ChecklistRunStep, type ChecklistRunSummary, type ChecklistSpec, type ChecklistStepCompleted, type ChecklistStepSpec, type ChecklistTemplateShape, type ChecklistTemplateSummary, type ChecklistTrigger, type ChecklistTriggerKind, type ChoiceOption, type CommentThreadRead, type CommentWritten, type ConversationScope, type ConversationScopeContext, type CustomFieldTableType, type DashboardBlock, type DashboardBlockKind, type DashboardBlockResult, type DashboardRunResult, type DashboardSummary, Delivery, type DigestPreview, type DocRenderRow, type DocSignatureCheck, type DocSignatureRow, type DocTemplateRow, type DocToken, type DocUnresolvedToken, type EnrichAlternate, type EnrichCell, type EnrichDeclared, type EnrichDueRow, type EnrichRun, type EnrichSource, type Enrichment, type EnrichmentSummary, type EntityFieldRights, type EntityFieldValue, type EntityRecordMatch, type EntityRecordRead, type EntityRecordsFound, type EntityTableFacts, type ExternalPrincipalCard, Field, type FieldHistoryEntry, type FormSummary, Freshness, type HistoryActor, type HistoryActorKind, type HistoryChange, type Home, type ImportBatchResult, type ImportColumnPlan, type ImportFinished, type ImportOpened, type ImportOutcome, type ImportPlan, type ImportPolicy, type ImportProposal, type ImportReport, type ImportRun, type InboundAddress, type InboundDeclared, type MergeField, MergeFieldModifier, type MergeFieldProvenance, type MergeFieldResolution, MergeFieldSemanticType, MergeFieldSource, type MergeFieldTransform, type MissingBehavior, type MyLevel, type MySubscription, type NewEntityFieldDeclaration, OnDelete, OverridePolicy, PERMISSION_LEVELS, PIPELINE_RULE_KINDS, ParityFieldType, type PermissionLevel, PgError, type Pipeline, type PipelineColumn, type PipelineDeclared, type PipelineGate, type PipelineGatePreview, type PipelineMissingField, type PipelineMoveResult, type PipelineRule, type PipelineRuleKind, type PipelineSpec, type PipelineStage, type PipelineVerdict, type PortalCard, type PortalInvitation, type PortalPreviewRow, type PortalPrincipal, type PortalRevocation, type PortalSummary, type PortalTableExposure, type PublishBinding, type QueuedCapture, type QueuedCaptureFile, type QueuedCaptureState, type QuietHours, REFUSALS_WORTH_REPEATING, type RecordComment, RecordDocument, type RecordHistoryEntry, type RecordScopeComment, type RecordScopeContext, type RecordScopeField, type RecordScopeHistoryEntry, type RecordScopeRelation, type RecordScopeWithheld, type RecordsActor, type RecordsChangeSink, type RecordsConfig, type RecordsDataSource, type RecordsErrorSink, type RecordsFilter, type RecordsRealtimePort, type RecordsResolverPort, type RecordsResponse, type RecordsTableQuery, type RegisteredTable, type Relation, RelationBinding, RelationCardinality, type RelationCarries, type RelationCoordinate, RelationFlavor, type RelationProperties, type RelationTarget, type ResolutionTriple, type ResolvedPublishBinding, type RestorePreview, type RestoreResult, type Rule, type RuleAnswer, type RuleExpression, RuleNodeKind, RuleUse, STAGE_RULE_ENFORCEMENT, STAGE_RULE_ON_FAIL, type SavedViewRow, type SavedViewSpecIn, type StagePending, type StagePendingOnBoard, type StageRuleEnforcement, type StageRuleOnFail, type StageRuleWarning, StorageMode, StoredRecord, type StuckRow, type Subscription, type SubscriptionBlock, type SubscriptionCadence, type SubscriptionSpec, type Table, type TableCapacity, TableDisplay, TableOrigin, TableType, Timestamp, Uuid, type WorkApprovalDecision, type WorkApprovalFiled, type WorkApprover, type WorkAssignment, type WorkAssignmentField, type WorkChange, type WorkDueState, type WorkGraph, type WorkInboxItem, type WorkInboxKind, type WorkInstantiation, type WorkListFlavour, type WorkListItem, type WorkOrigin, type WorkRecordState, type WorkSlotHold, type WorkState, type WorkTemplateNode, type WorkTemplateRelation, type WorkTurn, asPermissionLevel, atLeast, bookingPath, choiceSlug, choiceValuesOf, choicesOf, forgetAllOps, highestLevel, holdsARetiredChoice, indexedDbStore, isDecided, isOwnOp, isTheChosen, looksLikeAnId, mayDrag, measureKey, memoryStore, mintClientKey, mintOpId, openCaptureQueue, optionKey, optionLabel, portalPath, publicFormPath, rememberedOpCount, scopeChip };
3040
+ export { Actor, type AggregateBucket, type AggregateFilter, type AggregateMeasure, type AggregateOperation, type AggregateRow, type AggregateWindow, type AnonTokenBinding, type BookingAvailability, type BookingDeclared, type BookingSummary, type BookingWindow, type CaptureField, type CaptureFileRef, type CaptureOutcome, type CaptureQuestion, type CaptureQueue, type CaptureQueueCounts, type CaptureQueueOptions, type CaptureQueuePorts, type CaptureQueueStore, type CaptureSheetFace, type CaptureSheetSummary, type CaptureSyncReport, type ChecklistDeclared, type ChecklistRequirement, type ChecklistRequirementKind, type ChecklistRoleSpec, type ChecklistRunStarted, type ChecklistRunStep, type ChecklistRunSummary, type ChecklistSpec, type ChecklistStepCompleted, type ChecklistStepSpec, type ChecklistTemplateShape, type ChecklistTemplateSummary, type ChecklistTrigger, type ChecklistTriggerKind, type ChoiceOption, type ChoiceOptions, type CoerceOptions, type Coerced, type CoercedAnswers, type CoercibleField, type CommentThreadRead, type CommentWritten, type ConversationScope, type ConversationScopeContext, type CustomFieldTableType, type DashboardBlock, type DashboardBlockKind, type DashboardBlockResult, type DashboardRunResult, type DashboardSummary, Delivery, type DigestPreview, type DocRenderRow, type DocSignatureCheck, type DocSignatureRow, type DocTemplateRow, type DocToken, type DocUnresolvedToken, type EnrichAlternate, type EnrichCell, type EnrichDeclared, type EnrichDueRow, type EnrichRun, type EnrichSource, type Enrichment, type EnrichmentSummary, type EntityFieldRights, type EntityFieldValue, type EntityRecordMatch, type EntityRecordRead, type EntityRecordsFound, type EntityTableFacts, type ExternalPrincipalCard, FIELD_KINDS, Field, type FieldHistoryEntry, type FieldKind, type FormSummary, Freshness, type HistoryActor, type HistoryActorKind, type HistoryChange, type Home, type ImportBatchResult, type ImportColumnPlan, type ImportFinished, type ImportOpened, type ImportOutcome, type ImportPlan, type ImportPolicy, type ImportProposal, type ImportReport, type ImportRun, type InboundAddress, type InboundDeclared, type KernelTargets, type MergeField, MergeFieldModifier, type MergeFieldProvenance, type MergeFieldResolution, MergeFieldSemanticType, MergeFieldSource, type MergeFieldTransform, type MissingBehavior, type MyLevel, type MySubscription, type NewEntityFieldDeclaration, OnDelete, OverridePolicy, PERMISSION_LEVELS, PIPELINE_RULE_KINDS, ParityFieldType, type PermissionLevel, PgError, type Pipeline, type PipelineColumn, type PipelineDeclared, type PipelineGate, type PipelineGatePreview, type PipelineMissingField, type PipelineMoveResult, type PipelineRule, type PipelineRuleKind, type PipelineSpec, type PipelineStage, type PipelineVerdict, type PortalCard, type PortalInvitation, type PortalPreviewRow, type PortalPrincipal, type PortalRevocation, type PortalSummary, type PortalTableExposure, type PortalTableRef, type PublishBinding, type QueuedCapture, type QueuedCaptureFile, type QueuedCaptureState, type QuietHours, REFUSALS_WORTH_REPEATING, type RecordComment, RecordDocument, type RecordHistoryEntry, type RecordScopeComment, type RecordScopeContext, type RecordScopeField, type RecordScopeHistoryEntry, type RecordScopeRelation, type RecordScopeWithheld, type RecordsActor, type RecordsChangeSink, type RecordsConfig, type RecordsDataSource, type RecordsErrorSink, type RecordsFilter, type RecordsRealtimePort, type RecordsResolverPort, type RecordsResponse, type RecordsTableQuery, type RegisteredTable, type Relation, RelationBinding, RelationCardinality, type RelationCarries, type RelationCoordinate, RelationFlavor, type RelationProperties, type RelationTarget, type ResolutionTriple, type ResolvedPublishBinding, type RestorePreview, type RestoreResult, type Rule, type RuleAnswer, type RuleExpression, RuleNodeKind, RuleUse, STAGE_RULE_ENFORCEMENT, STAGE_RULE_ON_FAIL, type SavedViewRow, type SavedViewSpecIn, type StagePending, type StagePendingOnBoard, type StageRuleEnforcement, type StageRuleOnFail, type StageRuleWarning, StorageMode, StoredRecord, type StuckRow, type Subscription, type SubscriptionBlock, type SubscriptionCadence, type SubscriptionSpec, type Table, type TableCapacity, TableDisplay, TableOrigin, TableType, Timestamp, Uuid, type WorkApprovalDecision, type WorkApprovalFiled, type WorkApprover, type WorkAssignment, type WorkAssignmentField, type WorkChange, type WorkDueState, type WorkGraph, type WorkInboxItem, type WorkInboxKind, type WorkInstantiation, type WorkListFlavour, type WorkListItem, type WorkOrigin, type WorkRecordState, type WorkSlotHold, type WorkState, type WorkTemplateNode, type WorkTemplateRelation, type WorkTurn, asPermissionLevel, atLeast, bookingPath, choiceSlug, choiceValuesOf, choicesOf, coerceTypedAnswer, coerceTypedAnswers, coercionLabel, fieldKindFor, forgetAllOps, highestLevel, holdsARetiredChoice, indexedDbStore, isDecided, isOwnOp, isTheChosen, looksLikeAnId, mayDrag, measureKey, memoryStore, mintClientKey, mintOpId, openCaptureQueue, optionKey, optionLabel, portalPath, publicFormPath, rememberedOpCount, scopeChip };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { U as Uuid, T as TableType, a as TableDisplay, S as StorageMode, g as Timestamp, aw as TableOrigin, h as RecordDocument, m as StoredRecord, l as Field, a7 as ParityFieldType, am as RuleUse, al as RuleNodeKind, R as RelationFlavor, O as OnDelete, ai as RelationBinding, f as RelationCardinality, a1 as MergeFieldSource, a0 as MergeFieldSemanticType, $ as MergeFieldModifier, a4 as OverridePolicy, B as Delivery, M as Freshness, x as Actor, P as PgError } from './field-D0Rr4Cqb.js';
2
- export { A as ABSENCE_REASONS, v as ACTOR_VOCABULARY, w as AbsenceReason, y as COMPUTE_ON, z as CONTEXT_POLICIES, C as ComputeOn, e as ContextPolicy, D as DELIVERIES, E as ENTITY_TOKENS, G as EntityToken, H as FIELD_SENSITIVITIES, I as FIELD_SOURCES, J as FRESHNESS, K as FieldBehavior, n as FieldPatch, q as FieldProposal, c as FieldRule, d as FieldSensitivity, b as FieldSource, F as FieldTypeWord, L as ForbiddenEnvelopeWord, Q as HiddenFieldNotice, V as KERNEL_TABLES, X as KernelTableName, Y as MERGE_FIELD_MODIFIERS, Z as MERGE_FIELD_SEMANTIC_TYPES, _ as MERGE_FIELD_SOURCES, N as NewFieldDeclaration, a2 as ON_DELETE, a3 as OVERRIDE_POLICIES, a5 as PARITY_FIELD_TYPES, a6 as PER_VALUE_ACCESS_WORDS, a8 as ParityFieldTypeDescriptor, a9 as PerValueAccessWord, u as PredictedRefusal, aa as ProvenancePointer, ab as RELATION_BINDINGS, ac as RELATION_CARDINALITIES, ad as RELATION_FLAVORS, ae as RETIRED_ACTOR_WORDS, af as RULE_NODE_KINDS, ag as RULE_USES, k as ReadRow, p as ReadValue, j as RecordRead, o as RecordRevision, s as RecordsError, ah as RecordsErrorCode, i as RecordsResult, aj as RelationDisplay, ak as RetiredActorWord, an as STORAGE_MODES, ao as STORE_DOORS, ap as STORE_KNOBS, aq as STORE_REFUSAL_CODES, t as StaleWriteDetail, ar as StoreDoorName, as as StoreRefusalCode, at as TABLE_DISPLAYS, au as TABLE_ORIGINS, av as TABLE_TYPES, r as TableProposal, ax as VALUE_ALTERNATE_KEYS, ay as VALUE_ENVELOPE_KEYS, az as ValueAlternate, aA as ValueAlternateKey, aB as ValueEnvelope, aC as ValueEnvelopeKey, aD as ValueSource, W as WriteConflict, aE as err, aF as isRecordsErr, aG as ok } from './field-D0Rr4Cqb.js';
1
+ import { U as Uuid, T as TableType, a as TableDisplay, S as StorageMode, g as Timestamp, aw as TableOrigin, h as RecordDocument, m as StoredRecord, l as Field, a7 as ParityFieldType, am as RuleUse, al as RuleNodeKind, R as RelationFlavor, O as OnDelete, ai as RelationBinding, f as RelationCardinality, a1 as MergeFieldSource, a0 as MergeFieldSemanticType, $ as MergeFieldModifier, a4 as OverridePolicy, B as Delivery, M as Freshness, x as Actor, P as PgError } from './field-N0ExInZA.js';
2
+ export { A as ABSENCE_REASONS, v as ACTOR_VOCABULARY, w as AbsenceReason, y as COMPUTE_ON, z as CONTEXT_POLICIES, C as ComputeOn, e as ContextPolicy, D as DELIVERIES, E as ENTITY_TOKENS, G as EntityToken, H as FIELD_SENSITIVITIES, I as FIELD_SOURCES, J as FRESHNESS, K as FieldBehavior, n as FieldPatch, q as FieldProposal, c as FieldRule, d as FieldSensitivity, b as FieldSource, F as FieldTypeWord, L as ForbiddenEnvelopeWord, Q as HiddenFieldNotice, V as KERNEL_TABLES, X as KernelTableName, Y as MERGE_FIELD_MODIFIERS, Z as MERGE_FIELD_SEMANTIC_TYPES, _ as MERGE_FIELD_SOURCES, N as NewFieldDeclaration, a2 as ON_DELETE, a3 as OVERRIDE_POLICIES, a5 as PARITY_FIELD_TYPES, a6 as PER_VALUE_ACCESS_WORDS, a8 as ParityFieldTypeDescriptor, a9 as PerValueAccessWord, u as PredictedRefusal, aa as ProvenancePointer, ab as RELATION_BINDINGS, ac as RELATION_CARDINALITIES, ad as RELATION_FLAVORS, ae as RETIRED_ACTOR_WORDS, af as RULE_NODE_KINDS, ag as RULE_USES, k as ReadRow, p as ReadValue, j as RecordRead, o as RecordRevision, s as RecordsError, ah as RecordsErrorCode, i as RecordsResult, aj as RelationDisplay, ak as RetiredActorWord, an as STORAGE_MODES, ao as STORE_DOORS, ap as STORE_KNOBS, aq as STORE_REFUSAL_CODES, t as StaleWriteDetail, ar as StoreDoorName, as as StoreRefusalCode, at as TABLE_DISPLAYS, au as TABLE_ORIGINS, av as TABLE_TYPES, r as TableProposal, ax as VALUE_ALTERNATE_KEYS, ay as VALUE_ENVELOPE_KEYS, az as ValueAlternate, aA as ValueAlternateKey, aB as ValueEnvelope, aC as ValueEnvelopeKey, aD as ValueSource, W as WriteConflict, aE as err, aF as isRecordsErr, aG as ok } from './field-N0ExInZA.js';
3
3
 
4
4
  /** `public.permission_level`, in the store's own order. */
5
5
  type PermissionLevel = "viewer" | "commenter" | "editor" | "admin";
@@ -153,6 +153,129 @@ declare function holdsARetiredChoice(document: RecordDocument | undefined, field
153
153
  /** True when a token looks like a uuid — which a choice value is no longer allowed to be. */
154
154
  declare function looksLikeAnId(value: unknown): boolean;
155
155
 
156
+ /**
157
+ * EVERYTHING THIS FILE NEEDS TO KNOW ABOUT A FIELD, AND NOTHING ELSE.
158
+ *
159
+ * A full `Field` satisfies it, and so does every narrower shape the store
160
+ * hands to a screen — `CaptureField` on a phone with no network, the Field
161
+ * documents `custom.form_public` and `custom.booking_public` publish to a
162
+ * stranger. Asking for the whole `Field` would have meant the capture sheet
163
+ * keeping its own `Number(raw)`, which is exactly the duplication this file
164
+ * exists to end.
165
+ */
166
+ interface CoercibleField {
167
+ /** Named so the doc above is checkable: a full {@link Field} satisfies this. */
168
+ key: string;
169
+ label?: string | null;
170
+ name?: string | null;
171
+ /** FLD-1. One of five behaviours; an unknown word is treated as text. */
172
+ type?: string | null;
173
+ multi?: boolean | null;
174
+ unit?: string | null;
175
+ format?: string | null;
176
+ config?: Record<string, unknown> | null | undefined;
177
+ relation_target?: string | null;
178
+ }
179
+ /**
180
+ * The kind of value one Field holds, resolved from its DECLARATION only — the
181
+ * behaviour, the modifiers, the format, the relation target and the config,
182
+ * because those are what the store stores. A screen that guessed from a value
183
+ * would answer differently for an empty record.
184
+ *
185
+ * `plain_text`, `long_text`, `number` and `boolean` are behaviours that carry
186
+ * no parity type of their own; every other word here is a parity type.
187
+ */
188
+ declare const FIELD_KINDS: readonly ["attachment", "checkbox", "currency", "datetime", "email", "formula", "json", "long_text", "lookup", "member", "multi_select", "number", "percent", "phone", "relation", "rollup", "select", "text", "url"];
189
+ /**
190
+ * 🚨 THE UNION IS DERIVED FROM THE LIST ABOVE, and the list is what the
191
+ * coverage test walks. Add a kind here and the test drives it; give it no arm
192
+ * in `coerceTypedAnswer` and the test says so, instead of the new kind falling
193
+ * quietly through `default:` and a value of the wrong shape reaching the store
194
+ * — which is the whole defect this file closes.
195
+ */
196
+ type FieldKind = (typeof FIELD_KINDS)[number];
197
+ /** The kernel Table ids REC-31 pins the two special relations to. */
198
+ interface KernelTargets {
199
+ /** The kernel `File` Table — a relation pointing here is an attachment. */
200
+ file?: string | undefined;
201
+ /** The kernel `Person` Table — a relation pointing here names a person. */
202
+ person?: string | undefined;
203
+ }
204
+ /**
205
+ * Which kind of value this Field holds.
206
+ *
207
+ * This is the ONE classifier. `@ai-matrx/records-ui`'s `editorKindFor` — which
208
+ * decides which editor to DRAW — delegates to it, so the editor a person types
209
+ * into and the coercion applied to what they typed can never disagree about
210
+ * the same column. They did disagree before this moved here; that is the whole
211
+ * class of grid defect September was spent closing.
212
+ */
213
+ declare function fieldKindFor(field: CoercibleField, kernel?: KernelTargets): FieldKind;
214
+ /** One Field's options, indexed the way a typed word has to be looked up. */
215
+ interface ChoiceOptions {
216
+ /**
217
+ * Lower-cased label, option key and option id, each pointing at the OPTION
218
+ * RECORD'S ID — which is what a list Field stores (FLD-5/FLD-6).
219
+ */
220
+ byWord: Map<string, string>;
221
+ /** The labels, in order, so a refusal can say what is on offer. */
222
+ labels: string[];
223
+ }
224
+ /** What one answer became, or the sentence saying why it did not. */
225
+ type Coerced = {
226
+ value: unknown;
227
+ } | {
228
+ refusal: string;
229
+ unmatched?: string[];
230
+ };
231
+ interface CoerceOptions {
232
+ /** This Field's choices, when the caller has loaded them. */
233
+ options?: ChoiceOptions | undefined;
234
+ /** The kernel File/Person Table ids, for classifying relations. */
235
+ kernel?: KernelTargets | undefined;
236
+ /**
237
+ * The Field's name as this caller writes it. Defaults to the Field's own
238
+ * label. A screen passes the same words it printed above the box.
239
+ */
240
+ label?: string | undefined;
241
+ }
242
+ /** The Field's name in plain words — never its key on a screen. */
243
+ declare function coercionLabel(field: CoercibleField): string;
244
+ /**
245
+ * Turn ONE typed-in string into the value this Field holds — or say, in a
246
+ * sentence a person can act on, why it is not one.
247
+ *
248
+ * An empty answer is `null` for every kind: a blank means "no answer here",
249
+ * and clearing a value is a thing a person means to do. Whether the Field may
250
+ * be blank is the store's question, asked with the Field's `required` and its
251
+ * Rules, not this one's.
252
+ */
253
+ declare function coerceTypedAnswer(field: CoercibleField, raw: string, opts?: CoerceOptions): Coerced;
254
+ /** What a whole set of typed-in answers became. */
255
+ interface CoercedAnswers {
256
+ /** Ready to send to the store. Only the keys that coerced cleanly. */
257
+ values: Record<string, unknown>;
258
+ /** Field key → the sentence saying why that answer was not written. */
259
+ refusals: Record<string, string>;
260
+ /** The field keys the caller sent that this table has no Field for. */
261
+ unknownKeys: string[];
262
+ }
263
+ /**
264
+ * Every typed-in answer on one screen, coerced together — the shape the two
265
+ * public doors and the import wizard actually need.
266
+ *
267
+ * Keys the table has no Field for are reported rather than dropped: the store
268
+ * refuses an unknown key by name and a caller that quietly deleted it would
269
+ * hide a real mismatch between a page and its table.
270
+ */
271
+ declare function coerceTypedAnswers(fields: readonly CoercibleField[], answers: Readonly<Record<string, unknown>>, opts?: {
272
+ kernel?: KernelTargets | undefined;
273
+ /** Choices per Field key, for the list columns. */
274
+ options?: ReadonlyMap<string, ChoiceOptions> | undefined;
275
+ /** Field key → the words that screen printed above the box. */
276
+ labels?: Readonly<Record<string, string>> | undefined;
277
+ }): CoercedAnswers;
278
+
156
279
  /** The seven table types. Only these two carry custom fields (REC-34, DD-011). */
157
280
  type CustomFieldTableType = "entity" | "detail";
158
281
  /** What `custom.entity_table` answers about a registry token. */
@@ -949,6 +1072,26 @@ interface PortalSummary {
949
1072
  sign_in_method: string;
950
1073
  opened_at: Timestamp | null;
951
1074
  }
1075
+ /**
1076
+ * ONE (portal, Table) PAIR, as `custom.portal_tables` reports it.
1077
+ *
1078
+ * 🚨 WHY THIS EXISTS (TAILS-3, 2026-09-21). The Portals rail sits on a Table's
1079
+ * page beside Forms, Bookings and Dashboards — all table-scoped — while
1080
+ * `custom.portals` takes no table at all. On Rincon Plumbing Co's **Parts**
1081
+ * table the rail read "Portals 10" and listed ten cards titled "Your jobs and
1082
+ * invoices", which belong to **Jobs**; the empty state never rendered, so the
1083
+ * "Build it / Ask an agent" offer was unreachable on EVERY table of any
1084
+ * organization that already had one portal.
1085
+ *
1086
+ * This is the whole of what a table-scoped rail needs: is the table I am
1087
+ * standing on in any portal, and if not, which portals could take it.
1088
+ */
1089
+ interface PortalTableRef {
1090
+ portal_id: Uuid;
1091
+ table_id: Uuid;
1092
+ /** That Table's name, so a rail never reads a second door to draw a row. */
1093
+ name: string;
1094
+ }
952
1095
  /** One Table a portal exposes, as `custom.portal_card` reports it. */
953
1096
  interface PortalTableExposure {
954
1097
  table_id: Uuid;
@@ -2894,4 +3037,4 @@ interface ConversationScopeContext {
2894
3037
  /** `About: Acme Industrial` — the chip a bound chat wears. */
2895
3038
  declare function scopeChip(scope: ConversationScope): string;
2896
3039
 
2897
- export { Actor, type AggregateBucket, type AggregateFilter, type AggregateMeasure, type AggregateOperation, type AggregateRow, type AggregateWindow, type AnonTokenBinding, type BookingAvailability, type BookingDeclared, type BookingSummary, type BookingWindow, type CaptureField, type CaptureFileRef, type CaptureOutcome, type CaptureQuestion, type CaptureQueue, type CaptureQueueCounts, type CaptureQueueOptions, type CaptureQueuePorts, type CaptureQueueStore, type CaptureSheetFace, type CaptureSheetSummary, type CaptureSyncReport, type ChecklistDeclared, type ChecklistRequirement, type ChecklistRequirementKind, type ChecklistRoleSpec, type ChecklistRunStarted, type ChecklistRunStep, type ChecklistRunSummary, type ChecklistSpec, type ChecklistStepCompleted, type ChecklistStepSpec, type ChecklistTemplateShape, type ChecklistTemplateSummary, type ChecklistTrigger, type ChecklistTriggerKind, type ChoiceOption, type CommentThreadRead, type CommentWritten, type ConversationScope, type ConversationScopeContext, type CustomFieldTableType, type DashboardBlock, type DashboardBlockKind, type DashboardBlockResult, type DashboardRunResult, type DashboardSummary, Delivery, type DigestPreview, type DocRenderRow, type DocSignatureCheck, type DocSignatureRow, type DocTemplateRow, type DocToken, type DocUnresolvedToken, type EnrichAlternate, type EnrichCell, type EnrichDeclared, type EnrichDueRow, type EnrichRun, type EnrichSource, type Enrichment, type EnrichmentSummary, type EntityFieldRights, type EntityFieldValue, type EntityRecordMatch, type EntityRecordRead, type EntityRecordsFound, type EntityTableFacts, type ExternalPrincipalCard, Field, type FieldHistoryEntry, type FormSummary, Freshness, type HistoryActor, type HistoryActorKind, type HistoryChange, type Home, type ImportBatchResult, type ImportColumnPlan, type ImportFinished, type ImportOpened, type ImportOutcome, type ImportPlan, type ImportPolicy, type ImportProposal, type ImportReport, type ImportRun, type InboundAddress, type InboundDeclared, type MergeField, MergeFieldModifier, type MergeFieldProvenance, type MergeFieldResolution, MergeFieldSemanticType, MergeFieldSource, type MergeFieldTransform, type MissingBehavior, type MyLevel, type MySubscription, type NewEntityFieldDeclaration, OnDelete, OverridePolicy, PERMISSION_LEVELS, PIPELINE_RULE_KINDS, ParityFieldType, type PermissionLevel, PgError, type Pipeline, type PipelineColumn, type PipelineDeclared, type PipelineGate, type PipelineGatePreview, type PipelineMissingField, type PipelineMoveResult, type PipelineRule, type PipelineRuleKind, type PipelineSpec, type PipelineStage, type PipelineVerdict, type PortalCard, type PortalInvitation, type PortalPreviewRow, type PortalPrincipal, type PortalRevocation, type PortalSummary, type PortalTableExposure, type PublishBinding, type QueuedCapture, type QueuedCaptureFile, type QueuedCaptureState, type QuietHours, REFUSALS_WORTH_REPEATING, type RecordComment, RecordDocument, type RecordHistoryEntry, type RecordScopeComment, type RecordScopeContext, type RecordScopeField, type RecordScopeHistoryEntry, type RecordScopeRelation, type RecordScopeWithheld, type RecordsActor, type RecordsChangeSink, type RecordsConfig, type RecordsDataSource, type RecordsErrorSink, type RecordsFilter, type RecordsRealtimePort, type RecordsResolverPort, type RecordsResponse, type RecordsTableQuery, type RegisteredTable, type Relation, RelationBinding, RelationCardinality, type RelationCarries, type RelationCoordinate, RelationFlavor, type RelationProperties, type RelationTarget, type ResolutionTriple, type ResolvedPublishBinding, type RestorePreview, type RestoreResult, type Rule, type RuleAnswer, type RuleExpression, RuleNodeKind, RuleUse, STAGE_RULE_ENFORCEMENT, STAGE_RULE_ON_FAIL, type SavedViewRow, type SavedViewSpecIn, type StagePending, type StagePendingOnBoard, type StageRuleEnforcement, type StageRuleOnFail, type StageRuleWarning, StorageMode, StoredRecord, type StuckRow, type Subscription, type SubscriptionBlock, type SubscriptionCadence, type SubscriptionSpec, type Table, type TableCapacity, TableDisplay, TableOrigin, TableType, Timestamp, Uuid, type WorkApprovalDecision, type WorkApprovalFiled, type WorkApprover, type WorkAssignment, type WorkAssignmentField, type WorkChange, type WorkDueState, type WorkGraph, type WorkInboxItem, type WorkInboxKind, type WorkInstantiation, type WorkListFlavour, type WorkListItem, type WorkOrigin, type WorkRecordState, type WorkSlotHold, type WorkState, type WorkTemplateNode, type WorkTemplateRelation, type WorkTurn, asPermissionLevel, atLeast, bookingPath, choiceSlug, choiceValuesOf, choicesOf, forgetAllOps, highestLevel, holdsARetiredChoice, indexedDbStore, isDecided, isOwnOp, isTheChosen, looksLikeAnId, mayDrag, measureKey, memoryStore, mintClientKey, mintOpId, openCaptureQueue, optionKey, optionLabel, portalPath, publicFormPath, rememberedOpCount, scopeChip };
3040
+ export { Actor, type AggregateBucket, type AggregateFilter, type AggregateMeasure, type AggregateOperation, type AggregateRow, type AggregateWindow, type AnonTokenBinding, type BookingAvailability, type BookingDeclared, type BookingSummary, type BookingWindow, type CaptureField, type CaptureFileRef, type CaptureOutcome, type CaptureQuestion, type CaptureQueue, type CaptureQueueCounts, type CaptureQueueOptions, type CaptureQueuePorts, type CaptureQueueStore, type CaptureSheetFace, type CaptureSheetSummary, type CaptureSyncReport, type ChecklistDeclared, type ChecklistRequirement, type ChecklistRequirementKind, type ChecklistRoleSpec, type ChecklistRunStarted, type ChecklistRunStep, type ChecklistRunSummary, type ChecklistSpec, type ChecklistStepCompleted, type ChecklistStepSpec, type ChecklistTemplateShape, type ChecklistTemplateSummary, type ChecklistTrigger, type ChecklistTriggerKind, type ChoiceOption, type ChoiceOptions, type CoerceOptions, type Coerced, type CoercedAnswers, type CoercibleField, type CommentThreadRead, type CommentWritten, type ConversationScope, type ConversationScopeContext, type CustomFieldTableType, type DashboardBlock, type DashboardBlockKind, type DashboardBlockResult, type DashboardRunResult, type DashboardSummary, Delivery, type DigestPreview, type DocRenderRow, type DocSignatureCheck, type DocSignatureRow, type DocTemplateRow, type DocToken, type DocUnresolvedToken, type EnrichAlternate, type EnrichCell, type EnrichDeclared, type EnrichDueRow, type EnrichRun, type EnrichSource, type Enrichment, type EnrichmentSummary, type EntityFieldRights, type EntityFieldValue, type EntityRecordMatch, type EntityRecordRead, type EntityRecordsFound, type EntityTableFacts, type ExternalPrincipalCard, FIELD_KINDS, Field, type FieldHistoryEntry, type FieldKind, type FormSummary, Freshness, type HistoryActor, type HistoryActorKind, type HistoryChange, type Home, type ImportBatchResult, type ImportColumnPlan, type ImportFinished, type ImportOpened, type ImportOutcome, type ImportPlan, type ImportPolicy, type ImportProposal, type ImportReport, type ImportRun, type InboundAddress, type InboundDeclared, type KernelTargets, type MergeField, MergeFieldModifier, type MergeFieldProvenance, type MergeFieldResolution, MergeFieldSemanticType, MergeFieldSource, type MergeFieldTransform, type MissingBehavior, type MyLevel, type MySubscription, type NewEntityFieldDeclaration, OnDelete, OverridePolicy, PERMISSION_LEVELS, PIPELINE_RULE_KINDS, ParityFieldType, type PermissionLevel, PgError, type Pipeline, type PipelineColumn, type PipelineDeclared, type PipelineGate, type PipelineGatePreview, type PipelineMissingField, type PipelineMoveResult, type PipelineRule, type PipelineRuleKind, type PipelineSpec, type PipelineStage, type PipelineVerdict, type PortalCard, type PortalInvitation, type PortalPreviewRow, type PortalPrincipal, type PortalRevocation, type PortalSummary, type PortalTableExposure, type PortalTableRef, type PublishBinding, type QueuedCapture, type QueuedCaptureFile, type QueuedCaptureState, type QuietHours, REFUSALS_WORTH_REPEATING, type RecordComment, RecordDocument, type RecordHistoryEntry, type RecordScopeComment, type RecordScopeContext, type RecordScopeField, type RecordScopeHistoryEntry, type RecordScopeRelation, type RecordScopeWithheld, type RecordsActor, type RecordsChangeSink, type RecordsConfig, type RecordsDataSource, type RecordsErrorSink, type RecordsFilter, type RecordsRealtimePort, type RecordsResolverPort, type RecordsResponse, type RecordsTableQuery, type RegisteredTable, type Relation, RelationBinding, RelationCardinality, type RelationCarries, type RelationCoordinate, RelationFlavor, type RelationProperties, type RelationTarget, type ResolutionTriple, type ResolvedPublishBinding, type RestorePreview, type RestoreResult, type Rule, type RuleAnswer, type RuleExpression, RuleNodeKind, RuleUse, STAGE_RULE_ENFORCEMENT, STAGE_RULE_ON_FAIL, type SavedViewRow, type SavedViewSpecIn, type StagePending, type StagePendingOnBoard, type StageRuleEnforcement, type StageRuleOnFail, type StageRuleWarning, StorageMode, StoredRecord, type StuckRow, type Subscription, type SubscriptionBlock, type SubscriptionCadence, type SubscriptionSpec, type Table, type TableCapacity, TableDisplay, TableOrigin, TableType, Timestamp, Uuid, type WorkApprovalDecision, type WorkApprovalFiled, type WorkApprover, type WorkAssignment, type WorkAssignmentField, type WorkChange, type WorkDueState, type WorkGraph, type WorkInboxItem, type WorkInboxKind, type WorkInstantiation, type WorkListFlavour, type WorkListItem, type WorkOrigin, type WorkRecordState, type WorkSlotHold, type WorkState, type WorkTemplateNode, type WorkTemplateRelation, type WorkTurn, asPermissionLevel, atLeast, bookingPath, choiceSlug, choiceValuesOf, choicesOf, coerceTypedAnswer, coerceTypedAnswers, coercionLabel, fieldKindFor, forgetAllOps, highestLevel, holdsARetiredChoice, indexedDbStore, isDecided, isOwnOp, isTheChosen, looksLikeAnId, mayDrag, measureKey, memoryStore, mintClientKey, mintOpId, openCaptureQueue, optionKey, optionLabel, portalPath, publicFormPath, rememberedOpCount, scopeChip };