@ai-matrx/records 0.51.0 → 0.53.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.
@@ -1511,6 +1511,11 @@ declare const STORE_DOORS: readonly [{
1511
1511
  readonly args: "p_organization_id uuid, p_table_id uuid, p_format text DEFAULT 'csv'::text, p_source_name text DEFAULT NULL::text, p_source_columns jsonb DEFAULT '[]'::jsonb, p_file_hash text DEFAULT NULL::text, p_policy jsonb DEFAULT '{}'::jsonb, p_dedupe_key text DEFAULT NULL::text, p_file_bytes bigint DEFAULT NULL::bigint, p_force boolean DEFAULT false";
1512
1512
  readonly returns: "jsonb";
1513
1513
  readonly security: "definer";
1514
+ }, {
1515
+ readonly name: "io_import_declare_columns";
1516
+ readonly args: "p_organization_id uuid, p_table_id uuid, p_rows jsonb, p_mapping jsonb DEFAULT '{}'::jsonb";
1517
+ readonly returns: "jsonb";
1518
+ readonly security: "definer";
1514
1519
  }, {
1515
1520
  readonly name: "io_import_finish";
1516
1521
  readonly args: "p_organization_id uuid, p_import_id uuid, p_unmapped text DEFAULT NULL::text";
@@ -1676,6 +1681,11 @@ declare const STORE_DOORS: readonly [{
1676
1681
  readonly args: "p_pretend text, p_only_organization uuid, p_sample integer, p_exhaustive boolean";
1677
1682
  readonly returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)";
1678
1683
  readonly security: "invoker";
1684
+ }, {
1685
+ readonly name: "list_portals";
1686
+ readonly args: "p_organization_id uuid, p_archived text DEFAULT 'active'::text";
1687
+ readonly returns: "TABLE(portal_id uuid, title text, slug text, client_table_id uuid, client_table text, is_active boolean, tables integer, invited integer, signed_in integer, sign_in_method text, opened_at timestamp with time zone)";
1688
+ readonly security: "definer";
1679
1689
  }, {
1680
1690
  readonly name: "lookup_value";
1681
1691
  readonly args: "p_organization_id uuid, p_record_id uuid, p_field_data jsonb";
@@ -1921,6 +1931,11 @@ declare const STORE_DOORS: readonly [{
1921
1931
  readonly args: "p_organization_id uuid, p_user_id uuid DEFAULT NULL::uuid";
1922
1932
  readonly returns: "boolean";
1923
1933
  readonly security: "definer";
1934
+ }, {
1935
+ readonly name: "portal_archive";
1936
+ readonly args: "p_organization_id uuid, p_portal_id uuid, p_confirm_title text, p_reason text DEFAULT NULL::text";
1937
+ readonly returns: "jsonb";
1938
+ readonly security: "definer";
1924
1939
  }, {
1925
1940
  readonly name: "portal_card";
1926
1941
  readonly args: "p_organization_id uuid, p_portal_id uuid";
@@ -1976,6 +1991,11 @@ declare const STORE_DOORS: readonly [{
1976
1991
  readonly args: "p_organization_id uuid, p_record_id uuid";
1977
1992
  readonly returns: "text";
1978
1993
  readonly security: "definer";
1994
+ }, {
1995
+ readonly name: "portal_restore";
1996
+ readonly args: "p_organization_id uuid, p_portal_id uuid, p_confirm_title text";
1997
+ readonly returns: "jsonb";
1998
+ readonly security: "definer";
1979
1999
  }, {
1980
2000
  readonly name: "portal_revoke";
1981
2001
  readonly args: "p_organization_id uuid, p_portal_id uuid, p_principal_id uuid";
@@ -2686,6 +2706,11 @@ declare const STORE_DOORS: readonly [{
2686
2706
  readonly args: "p_organization_id uuid DEFAULT NULL::uuid";
2687
2707
  readonly returns: "boolean";
2688
2708
  readonly security: "invoker";
2709
+ }, {
2710
+ readonly name: "store_off_sentence";
2711
+ readonly args: "p_organization_id uuid";
2712
+ readonly returns: "text";
2713
+ readonly security: "invoker";
2689
2714
  }, {
2690
2715
  readonly name: "subscription_cadences";
2691
2716
  readonly args: "p_organization_id uuid";
@@ -3319,7 +3344,7 @@ declare const STORE_KNOBS: readonly [{
3319
3344
  */
3320
3345
  declare const STORE_REFUSAL_CODES: readonly [{
3321
3346
  readonly code: "02000";
3322
- readonly raised_by: "_checklist_instantiate,_portal_invite_payload,_share_write_person,_table_share_invite_payload,checklist_declare,checklist_run,checklist_step_complete,checklist_step_refusal,checklist_template_shape,conversation_scope_bind,dashboard_delete,dashboard_run,doc_letterhead,doc_render_body,doc_render_document,doc_render_read,doc_sign,doc_signature_intact,doc_signature_read,doc_template_delete,doc_template_read,doc_template_save,enrich_pin,entity_field_retire,entity_field_update,entity_record_read,entity_value_write,external_history_event,external_rows,external_stub_upsert,external_writes_set,io_restore,migrate_delete,migrate_extract_parent,migrate_merge,migrate_reclass,migrate_rename,migrate_reparent,migrate_retype,migrate_split,migrate_undo,organization_clear,portal_card,portal_declare,portal_invite,portal_invite_accept,portal_preview,portal_principal_bind,portal_revoke,read_record,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_uncarry,share_access,share_grant,share_lane_set,share_people,share_revoke,sign_request_cancel,sign_request_create,sign_request_remind,sign_request_unchanged,table_archive,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,table_share_outside_revoke,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state";
3347
+ readonly raised_by: "_checklist_instantiate,_portal_invite_payload,_share_write_person,_table_share_invite_payload,checklist_declare,checklist_run,checklist_step_complete,checklist_step_refusal,checklist_template_shape,conversation_scope_bind,dashboard_delete,dashboard_run,doc_letterhead,doc_render_body,doc_render_document,doc_render_read,doc_sign,doc_signature_intact,doc_signature_read,doc_template_delete,doc_template_read,doc_template_save,enrich_pin,entity_field_retire,entity_field_update,entity_record_read,entity_value_write,external_history_event,external_rows,external_stub_upsert,external_writes_set,io_restore,migrate_delete,migrate_extract_parent,migrate_merge,migrate_reclass,migrate_rename,migrate_reparent,migrate_retype,migrate_split,migrate_undo,organization_clear,portal_archive,portal_card,portal_declare,portal_invite,portal_invite_accept,portal_preview,portal_principal_bind,portal_restore,portal_revoke,read_record,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_uncarry,share_access,share_grant,share_lane_set,share_people,share_revoke,sign_request_cancel,sign_request_create,sign_request_remind,sign_request_unchanged,table_archive,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,table_share_outside_revoke,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state";
3323
3348
  }, {
3324
3349
  readonly code: "0A000";
3325
3350
  readonly raised_by: "checklist_step_complete,external_rows,external_source_declare,external_write_through,promote_field,promoted_index_expr,promoted_query_sql,promoted_read,rule_eval,work_assign";
@@ -3337,7 +3362,7 @@ declare const STORE_REFUSAL_CODES: readonly [{
3337
3362
  readonly raised_by: "rule_eval";
3338
3363
  }, {
3339
3364
  readonly code: "22023";
3340
- readonly raised_by: "_booking_availability,_entity_custom_fields_guard,_take_op_id,_value_envelope,_work_shape_guard,actor_word,agg_assert_key,agg_sql,anon_token_issue,booking_declare,containment_parent,dashboard_block_normalize,dashboard_window_sql,doc_render_body,doc_render_write,doc_signature_write,enrich_declare,enrich_land,enrich_normalize,enrich_pin,entity_value_write,external_history_event,external_source_declare,external_stub_upsert,external_write_through,field_history,field_update,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,portal_declare,provenance_write,query_by_coordinates,query_rollup,read_records_archived,record_update,record_write_many,relation_carry,rule_eval,rule_members,share_grant,share_lane_set,sign_request_create,sign_request_sign,subscription_declare,table_rules,visibility_as_of,work_approval_request,work_list,work_slot_hold";
3365
+ readonly raised_by: "_booking_availability,_entity_custom_fields_guard,_take_op_id,_value_envelope,_work_shape_guard,actor_word,agg_assert_key,agg_sql,anon_token_issue,booking_declare,containment_parent,dashboard_block_normalize,dashboard_window_sql,doc_render_body,doc_render_write,doc_signature_write,enrich_declare,enrich_land,enrich_normalize,enrich_pin,entity_value_write,external_history_event,external_source_declare,external_stub_upsert,external_write_through,field_history,field_update,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,list_portals,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,portal_declare,provenance_write,query_by_coordinates,query_rollup,read_records_archived,record_update,record_write_many,relation_carry,rule_eval,rule_members,share_grant,share_lane_set,sign_request_create,sign_request_sign,subscription_declare,table_rules,visibility_as_of,work_approval_request,work_list,work_slot_hold";
3341
3366
  }, {
3342
3367
  readonly code: "23503";
3343
3368
  readonly raised_by: "_booking_availability,_checklist_instantiate,_containment_guard,_display_spec_for,_field_document_for,_field_type_parity_guard,_pipeline_stage_key,_record_rule_uses,agg_digest_assemble,anon_publish,anon_rate_take,anon_token_issue,anon_write,assert_organization_wall,booking_cancel,booking_confirm,booking_declare,booking_hold,booking_reschedule,capture_publish,checklist_declare,checklist_steps_table,comment_write,dashboard_declare,delete_rule,doc_sign,doc_template_save,enrich_declare,enrich_due,enrich_land,form_declare,form_submit,home_add,inbound_declare,inbound_mail_land,inbound_set,io_comment_write,io_import_begin,io_import_finish,io_import_report,io_import_rows,io_proposal_accept,migrate_demote,migrate_promote,pipeline_board,pipeline_declare,pipeline_move,pipeline_read,pipeline_transition_refusal,promote_field,promote_table,record_applicability,record_reparent,relation_carry,relation_own,resolve_first_match,rule_applies,rule_declare,rule_eval,rule_members,rule_run,sign_request_create,subscription_mute,subscription_preview,view_declare,work_set_state,work_take_assignment,work_template_instantiate";
@@ -3346,7 +3371,7 @@ declare const STORE_REFUSAL_CODES: readonly [{
3346
3371
  readonly raised_by: "_share_write_person,_unique_rule_holds,doc_sign,doc_signature_write,entity_field_declare,field_declare,home_add,inbound_declare,io_proposal_accept,relation_carry,relation_own,sign_request_cancel,sign_request_create,table_share_outside_resend,work_approval_decide,work_slot_hold";
3347
3372
  }, {
3348
3373
  readonly code: "23514";
3349
- readonly raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_display_spec_for,_entity_custom_fields_guard,_field_class_guard,_field_document_for,_field_shape_guard,_field_type_parity_guard,_merge_field_shape_guard,_merge_field_temporal_guard,_promoted_field_cap_guard,_record_rule_uses,_resolve_choice_words,_rule_shape_guard,_rule_topology_guard,_store_relation_edge_names_its_field,_table_columns_word_guard,_table_shape_guard,_undeclared_key_guard,_value_envelope,_with_display,_work_shape_guard,_workdoors_approval_guard,assert_columns_are_defined,assert_entity_is_organization_scoped,booking_declare,capture_publish,capture_sheet_declare,checklist_declare,checklist_step_complete,doc_sign,doc_signature_write,doc_template_save,entity_field_declare,entity_field_retire,entity_field_update,entity_records_find,entity_table,field_declare,field_retire,field_update,home_add,io_comment_write,io_import_rows,migrate_merge,relation_carry,relation_own,sign_request_create,sign_request_sign,table_declare,validate_value_envelope,validate_values,work_set_state,work_slots_declare,work_take_assignment,work_template_instantiate";
3374
+ readonly raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_display_spec_for,_entity_custom_fields_guard,_field_class_guard,_field_document_for,_field_shape_guard,_field_type_parity_guard,_merge_field_shape_guard,_merge_field_temporal_guard,_promoted_field_cap_guard,_record_rule_uses,_resolve_choice_words,_rule_shape_guard,_rule_topology_guard,_store_relation_edge_names_its_field,_table_columns_word_guard,_table_shape_guard,_undeclared_key_guard,_value_envelope,_with_display,_work_shape_guard,_workdoors_approval_guard,assert_columns_are_defined,assert_entity_is_organization_scoped,booking_declare,capture_publish,capture_sheet_declare,checklist_declare,checklist_step_complete,doc_sign,doc_signature_write,doc_template_save,entity_field_declare,entity_field_retire,entity_field_update,entity_records_find,entity_table,field_declare,field_retire,field_update,home_add,io_comment_write,io_import_rows,migrate_merge,portal_archive,portal_restore,relation_carry,relation_own,sign_request_create,sign_request_sign,table_declare,validate_value_envelope,validate_values,work_set_state,work_slots_declare,work_take_assignment,work_template_instantiate";
3350
3375
  }, {
3351
3376
  readonly code: "40001";
3352
3377
  readonly raised_by: "has_visibility_at";
@@ -4033,6 +4058,51 @@ interface TableCapacity {
4033
4058
  /** The knob that decides the ceiling, named so a person can act on it. */
4034
4059
  knob: string;
4035
4060
  }
4061
+ /**
4062
+ * WHAT ONE PASS OF `custom.table_archive` ANSWERS WITH — the numbers a screen
4063
+ * needs to draw a bar and write a sentence, instead of a spinner and an
4064
+ * SQLSTATE (VERIFIER-10 F3, VERIFIER-11 F3).
4065
+ *
4066
+ * Archiving a table is a JOB, NOT A STATEMENT. `custom.record_delete` on a
4067
+ * Table recurses through everything the Table contains inside one transaction,
4068
+ * which is unbounded by construction: at 1,430 records it dies on `57014`,
4069
+ * "canceling statement due to statement timeout", and nothing is changed. The
4070
+ * remedy for a thing that cannot finish in one statement is more statements,
4071
+ * never a longer one — so the caller loops, passing its own `chunk`, until
4072
+ * `done`.
4073
+ *
4074
+ * IT IS RESUMABLE BECAUSE IT IS STATELESS. There is no job row to lose:
4075
+ * `remaining` is read off the records themselves on every call, so a browser
4076
+ * closed halfway, a failed pass or a deploy mid-run all leave a table that is
4077
+ * half archived and a next call that picks up exactly where the last stopped.
4078
+ * Which is why a screen driving this may NEVER say "nothing was changed" after
4079
+ * a pass that moved rows — `archived_total` is what really landed.
4080
+ *
4081
+ * NOTHING IS DELETED. Every row goes through `custom.record_delete`, so every
4082
+ * guard, history capture and outbox row still happens and `recordRestore`
4083
+ * still brings any of them back.
4084
+ */
4085
+ interface TableArchiveProgress {
4086
+ table_id: Uuid;
4087
+ /** The table's own name, so a sentence can use it rather than an id. */
4088
+ table_name: string;
4089
+ /** What THIS pass archived. */
4090
+ archived: number;
4091
+ /** Records of this table still live. Zero is the end of the row work. */
4092
+ remaining: number;
4093
+ /** Records this table has ever held: `remaining` + `archived_total`. */
4094
+ total: number;
4095
+ /** Records of this table already archived, across every pass ever made. */
4096
+ archived_total: number;
4097
+ /** Whether the Table record itself has been archived. */
4098
+ table_archived: boolean;
4099
+ /** Nothing live is left to do. The caller's loop ends here. */
4100
+ done: boolean;
4101
+ /** The chunk the door actually took on — it clamps what it is handed. */
4102
+ chunk: number;
4103
+ /** The store's own sentence about this pass, in the product's voice. */
4104
+ message: string;
4105
+ }
4036
4106
 
4037
4107
  /** FLD-3. A constraint attached to a Field. A Rule, never a behaviour. */
4038
4108
  interface FieldRule {
@@ -5162,6 +5232,14 @@ interface ImportOpened {
5162
5232
  rows_duplicate: number;
5163
5233
  source_name: string | null;
5164
5234
  opened_at?: Timestamp;
5235
+ /**
5236
+ * IMPORT-2. How many rows to send in the FIRST call. The store owns this
5237
+ * number rather than a screen, because nothing has been measured yet when a
5238
+ * run opens and a batch size written into a wizard is wrong on a busy
5239
+ * afternoon and stale the day the write path gets cheaper. Every call after
5240
+ * the first uses `ImportBatchResult.rows_per_call`, which is measured.
5241
+ */
5242
+ rows_per_call?: number;
5165
5243
  message: string;
5166
5244
  }
5167
5245
  /** One row of the file, and what became of it. */
@@ -5206,6 +5284,36 @@ interface ImportBatchResult {
5206
5284
  rows_refused: number;
5207
5285
  outcomes: ImportOutcome[];
5208
5286
  proposals: ImportProposal[];
5287
+ /**
5288
+ * IMPORT-2. The columns this call had to declare because the run never took
5289
+ * the `importDeclareColumns` step. Normally empty: declaring is its own step.
5290
+ */
5291
+ columns_added?: ImportProposal[];
5292
+ /**
5293
+ * IMPORT-2. FALSE means the batch could not be written as one statement — one
5294
+ * row of it was refused by a guard that refuses the whole statement — so every
5295
+ * row was written on its own instead and the refusals below name the rows that
5296
+ * could not be. The answers are identical either way; this says what it cost.
5297
+ */
5298
+ one_statement?: boolean;
5299
+ /** How long THIS call's writing phase took, and what that was a row. */
5300
+ write_ms?: number;
5301
+ ms_per_row?: number;
5302
+ /**
5303
+ * IMPORT-2. How many rows the NEXT call should carry, measured from this one:
5304
+ * the store aims at two seconds of writing, which leaves a database that gets
5305
+ * 50% busier between two calls still inside the three seconds a person should
5306
+ * wait. Send this many next. Ignoring it costs correctness nothing.
5307
+ */
5308
+ rows_per_call?: number;
5309
+ }
5310
+ /** IMPORT-2. What `importDeclareColumns` made, as its own step of the wizard. */
5311
+ interface ImportColumnsDeclared {
5312
+ table_id: Uuid;
5313
+ columns_added: ImportProposal[];
5314
+ /** Header -> Field key, including the headers that already named a column. */
5315
+ mapping: Record<string, string>;
5316
+ message: string;
5209
5317
  }
5210
5318
  interface ImportFinished {
5211
5319
  import_id: Uuid;
@@ -5430,6 +5538,49 @@ interface PortalPreviewRow {
5430
5538
  * nothing more. That is why it is readable and why copying it is safe.
5431
5539
  */
5432
5540
  declare function portalPath(slug: string): string;
5541
+ /**
5542
+ * The platform archive filter's own three values, and no fourth. `custom.list_portals`
5543
+ * refuses anything else with `22023` rather than quietly treating it as one of them.
5544
+ */
5545
+ declare const PORTAL_ARCHIVE_FILTERS: readonly ["active", "archived", "all"];
5546
+ type PortalArchiveFilter = (typeof PORTAL_ARCHIVE_FILTERS)[number];
5547
+ /** THE LAW'S DEFAULT IS TO HIDE. A list nobody narrowed is the live things. */
5548
+ declare const DEFAULT_PORTAL_ARCHIVE_FILTER: PortalArchiveFilter;
5549
+ declare function isPortalArchiveFilter(word: unknown): word is PortalArchiveFilter;
5550
+ /** What `custom.portal_archive` and `custom.portal_restore` answer with. */
5551
+ interface PortalArchiveAnswer {
5552
+ /** Where the portal stands NOW — true after an archive, false after a restore. */
5553
+ archived: boolean;
5554
+ /** False when it was already in that state; the sentence says so rather than lying about an act. */
5555
+ changed: boolean;
5556
+ portal_id: Uuid;
5557
+ archived_at?: Timestamp | null;
5558
+ /** The store's own sentence, in plain English. Show it verbatim; never a constraint name. */
5559
+ sentence: string;
5560
+ }
5561
+ /**
5562
+ * THE CONSEQUENCE, SAID BEFORE THE CLICK — never a generic "are you sure?".
5563
+ *
5564
+ * What actually changes is two things: nobody can sign in to it any more, and it
5565
+ * leaves the organization's portal list. What does NOT change is everything
5566
+ * else, and saying so is the difference between an archive somebody dares to
5567
+ * press and one they avoid.
5568
+ */
5569
+ declare function portalArchiveConsequence(title: string, signedIn: number, invited: number): string;
5570
+ /**
5571
+ * WHY THE TITLE HAS TO BE TYPED BACK, in the store's own reasoning. Ten portals
5572
+ * can carry one title, so the title is not what PICKS this one — the portal you
5573
+ * opened is. Typing it back is how you say you meant this one.
5574
+ */
5575
+ declare function portalConfirmLine(title: string): string;
5576
+ /** True when what the person typed is what the door will accept. The door decides; this only spares them a round trip. */
5577
+ declare function portalTitleTypedBack(typed: string, title: string): boolean;
5578
+ /**
5579
+ * WHAT AN EMPTY ARCHIVE LANE SAYS. An empty list is an answer: it says nothing
5580
+ * has been archived, so "none here" can never be read as "the archive is broken"
5581
+ * or as "this organization has no portals at all".
5582
+ */
5583
+ declare function emptyPortalArchiveLine(): string;
5433
5584
 
5434
5585
  /** The measures the store offers. Asked of `custom.agg_operations()` at run time too. */
5435
5586
  type AggregateOperation = "count" | "sum" | "avg" | "min" | "max";
@@ -7326,13 +7477,52 @@ interface RecordsClient {
7326
7477
  /** Leave it out and the last writer wins; supply it and a loser is TOLD. */
7327
7478
  expectedVersion?: number;
7328
7479
  }): Promise<RecordsResult<number>>;
7329
- /** REC-23. Soft, and reversible within `retention`. */
7480
+ /**
7481
+ * REC-23. Soft, and reversible within `retention`.
7482
+ *
7483
+ * 🚨 NOT FOR A TABLE. A Table is a record, so this door accepts one — and
7484
+ * then recurses through every record the Table contains inside a single
7485
+ * transaction, which is unbounded by construction and dies on `57014` at a
7486
+ * size the product's own import reaches in half a minute. Use
7487
+ * `tableArchive` below, which does the same work in resumable passes.
7488
+ */
7330
7489
  recordDelete(args: {
7331
7490
  record_id: Uuid;
7332
7491
  }): Promise<RecordsResult<Timestamp>>;
7333
7492
  recordRestore(args: {
7334
7493
  record_id: Uuid;
7335
7494
  }): Promise<RecordsResult<void>>;
7495
+ /**
7496
+ * ARCHIVING A WHOLE TABLE — ONE PASS OF IT (VERIFIER-11 F3).
7497
+ *
7498
+ * One call archives at most `chunk` of the table's live records through
7499
+ * `custom.record_delete` (so every guard, history capture and outbox row
7500
+ * still happens; nothing is hard-deleted) and comes back with the numbers a
7501
+ * screen draws progress from. The CALLER LOOPS until `done` — that loop is
7502
+ * the fix, because the one thing a single statement cannot be made to do is
7503
+ * finish.
7504
+ *
7505
+ * `chunk: 0` changes nothing and only reports, so a screen can say "1,430
7506
+ * records will be archived" BEFORE a person commits to it. `includeTable:
7507
+ * false` empties the table and leaves it standing.
7508
+ *
7509
+ * RESUMABLE, WITHOUT A JOB ROW: what remains is read off the records
7510
+ * themselves every call. A pass that fails, a closed tab or a deploy mid-run
7511
+ * leaves a half-archived table and a next call that continues from exactly
7512
+ * there. A caller must therefore never report "nothing happened" after a
7513
+ * failed pass — `archived_total` says what really landed.
7514
+ */
7515
+ tableArchive(args: {
7516
+ table_id: Uuid;
7517
+ /**
7518
+ * How many records this pass takes on. The door clamps it; it answers with what it
7519
+ * took. Default 50 — measured: ~35ms a record against an 8s statement timeout, so
7520
+ * 200 dies on `57014` and is the original defect one level up.
7521
+ */
7522
+ chunk?: number;
7523
+ /** Archive the Table record itself once nothing live is left in it. Default true. */
7524
+ includeTable?: boolean;
7525
+ }): Promise<RecordsResult<TableArchiveProgress>>;
7336
7526
  recordRead(args: {
7337
7527
  record_id: Uuid;
7338
7528
  withComputed?: boolean;
@@ -7711,9 +7901,24 @@ interface RecordsClient {
7711
7901
  force?: boolean;
7712
7902
  }): Promise<RecordsResult<ImportOpened>>;
7713
7903
  /**
7714
- * One BATCH of rows. Every row is written through the ONE write door inside
7715
- * its own subtransaction, so a refused row leaves nothing behind and never
7716
- * costs the rows before it. Send a few hundred at a time.
7904
+ * IMPORT-2. ADD THE COLUMNS THIS FILE HAS AND THIS TABLE HAS NOT — a step of
7905
+ * its own, BEFORE the run is opened, so the screen can show "8 columns added"
7906
+ * and the person can then name one of them as the file's duplicate key
7907
+ * (`importBegin` refuses a key naming a column that does not exist yet).
7908
+ * Answers the mapping the file should be sent with. Admin on the Table.
7909
+ */
7910
+ importDeclareColumns(args: {
7911
+ table_id: Uuid;
7912
+ rows: Array<Record<string, unknown>>;
7913
+ /** Header -> Field key the person already mapped by hand; never declared. */
7914
+ mapping?: Record<string, string>;
7915
+ }): Promise<RecordsResult<ImportColumnsDeclared>>;
7916
+ /**
7917
+ * One BATCH of rows. The batch is PLANNED and then written as ONE statement
7918
+ * through the batched write door, so 250 round trips became one; a batch a
7919
+ * guard refuses falls back to one write a row, and the answer says which it
7920
+ * was. Send `ImportOpened.rows_per_call` the first time and
7921
+ * `ImportBatchResult.rows_per_call` — measured — every time after that.
7717
7922
  */
7718
7923
  importRows(args: {
7719
7924
  import_id: Uuid;
@@ -7773,6 +7978,33 @@ interface RecordsClient {
7773
7978
  }>>;
7774
7979
  /** Every portal over this organization the caller may know about, with its numbers. */
7775
7980
  portals(): Promise<RecordsResult<PortalSummary[]>>;
7981
+ /**
7982
+ * The SAME list, archive-aware. `custom.portals` keeps its signature and hides
7983
+ * archived portals, because the archived-items law's default is to hide;
7984
+ * this is the one door that also answers the other lane, so a rail gets the
7985
+ * law's one-click reveal without inventing a second control or a second door.
7986
+ * A fourth word is refused `22023` — there is no fourth answer on any surface.
7987
+ */
7988
+ listPortals(args?: {
7989
+ archived?: PortalArchiveFilter;
7990
+ }): Promise<RecordsResult<PortalSummary[]>>;
7991
+ /**
7992
+ * PUT ONE PORTAL AWAY. Nothing is deleted and there is no purge: every Table
7993
+ * it exposes and every person invited to it is kept exactly as it is, and
7994
+ * `portalRestore` hands it all back. `confirm_title` is the portal's own title
7995
+ * typed back — ten portals can carry one title, so the title is not what picks
7996
+ * this one and the door refuses `23514` when it does not match.
7997
+ */
7998
+ portalArchive(args: {
7999
+ portal_id: Uuid;
8000
+ confirm_title: string;
8001
+ reason?: string | null;
8002
+ }): Promise<RecordsResult<PortalArchiveAnswer>>;
8003
+ /** The way back. Everyone invited signs in exactly as before, and it shows the same Tables. */
8004
+ portalRestore(args: {
8005
+ portal_id: Uuid;
8006
+ confirm_title: string;
8007
+ }): Promise<RecordsResult<PortalArchiveAnswer>>;
7776
8008
  /**
7777
8009
  * Which Tables each portal of this organization exposes.
7778
8010
  *
@@ -8784,6 +9016,68 @@ interface UseRecordMutation {
8784
9016
  }
8785
9017
  /** Writes, with optimistic concurrency surfaced instead of swallowed. */
8786
9018
  declare function useRecordMutation(): UseRecordMutation;
9019
+ /**
9020
+ * GETTING RID OF A WHOLE TABLE — the loop, once, for every screen (VERIFIER-11 F3).
9021
+ *
9022
+ * `useRecordMutation().remove` is right for a record and WRONG for a Table:
9023
+ * `custom.record_delete` aimed at a Table recurses through everything it
9024
+ * contains inside one transaction, so on 1,430 records — a size the product's
9025
+ * own import reaches in half a minute — it died twelve seconds in on `57014`,
9026
+ * "canceling statement due to statement timeout", and the screen told the
9027
+ * person nothing had changed and to "try a smaller page". There is no page.
9028
+ *
9029
+ * So archiving a table is a JOB: this hook makes the passes, holds the numbers
9030
+ * the store answers each one with, and stops on `done`.
9031
+ *
9032
+ * WHAT MAKES IT RESUMABLE is that nothing here is the state of the run — the
9033
+ * store reads what remains off the records themselves every call. A refused
9034
+ * pass, a `stop()`, a closed tab or a reload all leave `interrupted` true and a
9035
+ * `carryOn()` that continues from exactly where the last pass stopped. Which is
9036
+ * also why a screen driving this may never say "nothing was changed" after a
9037
+ * failure: `progress.archived_total` is what actually landed, and it is the
9038
+ * number the person is owed.
9039
+ */
9040
+ interface UseTableArchive {
9041
+ /** The numbers from the last pass or preview. Null until something has been asked. */
9042
+ progress: TableArchiveProgress | null;
9043
+ /** A loop is in flight. */
9044
+ running: boolean;
9045
+ /** Passes made since the last `start()`. */
9046
+ passes: number;
9047
+ /**
9048
+ * The pass size in use. It STARTS at `chunk` and HALVES whenever the store
9049
+ * runs out of time, so a screen can say the run slowed down rather than
9050
+ * letting it look stuck. Never below ten: at that point the store is not slow,
9051
+ * it is refusing, and a loop that kept shrinking would hide it.
9052
+ */
9053
+ chunkInUse: number;
9054
+ /**
9055
+ * The loop backed the pass size off because the store ran out of time. An
9056
+ * automatic intervention ANNOUNCES ITSELF: a run that quietly went four times
9057
+ * slower would read as a stuck screen.
9058
+ */
9059
+ slowedDown: boolean;
9060
+ /** The refusal that stopped the loop. The work already done still stands. */
9061
+ error: RecordsError | null;
9062
+ /**
9063
+ * The loop ended with records still live — because a pass was refused or
9064
+ * because `stop()` was called. It is the screen's cue to offer carrying on
9065
+ * rather than to claim a finished or a failed run.
9066
+ */
9067
+ interrupted: boolean;
9068
+ /** Ask what would happen and change NOTHING, so a person sees the number first. */
9069
+ preview: () => Promise<TableArchiveProgress | null>;
9070
+ /** Run passes until done, refused, or stopped. */
9071
+ start: () => Promise<TableArchiveProgress | null>;
9072
+ /** Same loop, said in the word a screen uses after an interruption. */
9073
+ carryOn: () => Promise<TableArchiveProgress | null>;
9074
+ /** Cut cleanly after the pass in flight. Never mid-pass: a pass is one transaction. */
9075
+ stop: () => void;
9076
+ }
9077
+ declare function useTableArchive(tableId: Uuid, options?: {
9078
+ chunk?: number;
9079
+ includeTable?: boolean;
9080
+ }): UseTableArchive;
8787
9081
  interface UseFieldMutation {
8788
9082
  /** Add a column. One call; the store decides what the parity type is made of. */
8789
9083
  declare: (args: {
@@ -8873,4 +9167,4 @@ declare function useFieldMutation(): UseFieldMutation;
8873
9167
  */
8874
9168
  declare function useMergeField(key: string | null, state?: Record<string, unknown>): MergeFieldResolution | null;
8875
9169
 
8876
- export { ABSENCE_REASONS, ACTOR_VOCABULARY, ARCHIVE_LANES, ARCHIVE_LANE_LABEL, ARCHIVE_LANE_MEANS, type AbsenceReason, type Actor, type AggregateBucket, type AggregateFilter, type AggregateMeasure, type AggregateOperation, type AggregateRow, type AggregateWindow, type AnonTokenBinding, type ArchiveLane, type ArchivedDoorRow, type ArchivedRow, type BookingAvailability, type BookingDeclared, type BookingSummary, type BookingWindow, COMPUTE_ON, CONTEXT_POLICIES, 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 ComputeOn, type ContextPolicy, type ConversationScope, type ConversationScopeContext, type CustomFieldTableType, DECLARABLE_FIELD_KINDS, DEFAULT_ARCHIVE_LANE, DELIVERIES, type DashboardBlock, type DashboardBlockKind, type DashboardBlockResult, type DashboardRunResult, type DashboardSummary, type DeclarableFieldKind, type Delivery, type DigestPreview, type DocRenderRow, type DocSignatureCheck, type DocSignatureRow, type DocTemplateRow, type DocToken, type DocUnresolvedToken, ENTITY_TOKENS, 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 EntityToken, type ExternalPrincipalCard, FIELD_KINDS, FIELD_SENSITIVITIES, FIELD_SOURCES, FRESHNESS, type Field, type FieldBehavior, type FieldHistoryEntry, type FieldKind, type FieldPatch, type FieldProposal, type FieldRule, type FieldSensitivity, type FieldSource, type FieldTypeWord, type ForbiddenEnvelopeWord, type FormSummary, type Freshness, type HiddenFieldNotice, 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, KERNEL_TABLES, type KernelTableName, type KernelTargets, MERGE_FIELD_MODIFIERS, MERGE_FIELD_SEMANTIC_TYPES, MERGE_FIELD_SOURCES, type MergeField, type MergeFieldModifier, type MergeFieldProvenance, type MergeFieldResolution, type MergeFieldSemanticType, type MergeFieldSource, type MergeFieldTransform, type MissingBehavior, type MyLevel, type MySubscription, type NewEntityFieldDeclaration, type NewFieldDeclaration, ON_DELETE, OVERRIDE_POLICIES, type OnDelete, type OverridePolicy, PARITY_FIELD_TYPES, PERMISSION_LEVELS, PER_VALUE_ACCESS_WORDS, PIPELINE_RULE_KINDS, type ParityFieldType, type ParityFieldTypeDescriptor, type PerValueAccessWord, type PermissionLevel, type 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 PredictedRefusal, type ProvenancePointer, type PublishBinding, type QueuedCapture, type QueuedCaptureFile, type QueuedCaptureState, type QuietHours, REFUSALS_WORTH_REPEATING, RELATION_BINDINGS, RELATION_CARDINALITIES, RELATION_FLAVORS, RETIRED_ACTOR_WORDS, RULE_NODE_KINDS, RULE_USES, type ReadRow, type ReadValue, type RecordComment, type RecordDocument, type RecordFilter, type RecordHistoryEntry, type RecordRead, type RecordRevision, type RecordScopeComment, type RecordScopeContext, type RecordScopeField, type RecordScopeHistoryEntry, type RecordScopeRelation, type RecordScopeWithheld, type RecordsActor, type RecordsChangeSink, type RecordsConfig, type RecordsDataSource, type RecordsError, type RecordsErrorCode, type RecordsErrorSink, type RecordsFilter, RecordsProvider, type RecordsProviderProps, type RecordsRealtimePort, type RecordsResolverPort, type RecordsResponse, type RecordsResult, type RecordsTableQuery, type RegisteredTable, type Relation, type RelationBinding, type RelationCardinality, type RelationCarries, type RelationCoordinate, type RelationDisplay, type RelationFlavor, type RelationProperties, type RelationTarget, type ResolutionTriple, type ResolvedPublishBinding, type RestorePreview, type RestoreResult, type RetiredActorWord, type Rule, type RuleAnswer, type RuleExpression, type RuleNodeKind, type RuleUse, STAGE_RULE_ENFORCEMENT, STAGE_RULE_ON_FAIL, STORAGE_MODES, STORE_DOORS, STORE_KNOBS, STORE_REFUSAL_CODES, type SavedViewRow, type SavedViewSpecIn, type StagePending, type StagePendingOnBoard, type StageRuleEnforcement, type StageRuleOnFail, type StageRuleWarning, type StaleWriteDetail, type StorageMode, type StoreDoorName, type StoreRefusalCode, type StoredRecord, type StuckRow, type Subscription, type SubscriptionBlock, type SubscriptionCadence, type SubscriptionSpec, TABLE_DISPLAYS, TABLE_ORIGINS, TABLE_TYPES, type Table, type TableCapacity, type TableDisplay, type TableOrigin, type TableProposal, type TableType, type Timestamp, type UseEntityFieldMutation, type UseFieldMutation, type UseRecordMutation, type UseRecordsOptions, type UseRecordsState, type Uuid, VALUE_ALTERNATE_KEYS, VALUE_ENVELOPE_KEYS, type ValueAlternate, type ValueAlternateKey, type ValueEnvelope, type ValueEnvelopeKey, type ValueSource, 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, type WriteConflict, archivedByLine, archivedWhen, asPermissionLevel, atLeast, bookingPath, choiceSlug, choiceValuesOf, choicesOf, coerceTypedAnswer, coerceTypedAnswers, coercionLabel, emptyArchiveLine, err, fieldKindFor, forgetAllOps, highestLevel, holdsARetiredChoice, indexedDbStore, isArchiveLane, isDecided, isOwnOp, isRecordsErr, isTheChosen, looksLikeAnId, mayDrag, measureKey, memoryStore, mintClientKey, mintOpId, ok, openCaptureQueue, optionKey, optionLabel, portalPath, publicFormPath, rememberedOpCount, sameDocument, scopeChip, stableFilterKey, tableShapeChanged, useEntityFieldMutation, useEntityFieldRights, useEntityFields, useEntityRecord, useEntityTable, useFieldMutation, useFields, useMergeField, useMyLevel, useMyLevels, useOptionalRecordsClient, useRecord, useRecordMutation, useRecords, useRecordsActor, useRecordsClient, useTable, useTables };
9170
+ export { ABSENCE_REASONS, ACTOR_VOCABULARY, ARCHIVE_LANES, ARCHIVE_LANE_LABEL, ARCHIVE_LANE_MEANS, type AbsenceReason, type Actor, type AggregateBucket, type AggregateFilter, type AggregateMeasure, type AggregateOperation, type AggregateRow, type AggregateWindow, type AnonTokenBinding, type ArchiveLane, type ArchivedDoorRow, type ArchivedRow, type BookingAvailability, type BookingDeclared, type BookingSummary, type BookingWindow, COMPUTE_ON, CONTEXT_POLICIES, 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 ComputeOn, type ContextPolicy, type ConversationScope, type ConversationScopeContext, type CustomFieldTableType, DECLARABLE_FIELD_KINDS, DEFAULT_ARCHIVE_LANE, DEFAULT_PORTAL_ARCHIVE_FILTER, DELIVERIES, type DashboardBlock, type DashboardBlockKind, type DashboardBlockResult, type DashboardRunResult, type DashboardSummary, type DeclarableFieldKind, type Delivery, type DigestPreview, type DocRenderRow, type DocSignatureCheck, type DocSignatureRow, type DocTemplateRow, type DocToken, type DocUnresolvedToken, ENTITY_TOKENS, 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 EntityToken, type ExternalPrincipalCard, FIELD_KINDS, FIELD_SENSITIVITIES, FIELD_SOURCES, FRESHNESS, type Field, type FieldBehavior, type FieldHistoryEntry, type FieldKind, type FieldPatch, type FieldProposal, type FieldRule, type FieldSensitivity, type FieldSource, type FieldTypeWord, type ForbiddenEnvelopeWord, type FormSummary, type Freshness, type HiddenFieldNotice, type HistoryActor, type HistoryActorKind, type HistoryChange, type Home, type ImportBatchResult, type ImportColumnPlan, type ImportColumnsDeclared, type ImportFinished, type ImportOpened, type ImportOutcome, type ImportPlan, type ImportPolicy, type ImportProposal, type ImportReport, type ImportRun, type InboundAddress, type InboundDeclared, KERNEL_TABLES, type KernelTableName, type KernelTargets, MERGE_FIELD_MODIFIERS, MERGE_FIELD_SEMANTIC_TYPES, MERGE_FIELD_SOURCES, type MergeField, type MergeFieldModifier, type MergeFieldProvenance, type MergeFieldResolution, type MergeFieldSemanticType, type MergeFieldSource, type MergeFieldTransform, type MissingBehavior, type MyLevel, type MySubscription, type NewEntityFieldDeclaration, type NewFieldDeclaration, ON_DELETE, OVERRIDE_POLICIES, type OnDelete, type OverridePolicy, PARITY_FIELD_TYPES, PERMISSION_LEVELS, PER_VALUE_ACCESS_WORDS, PIPELINE_RULE_KINDS, PORTAL_ARCHIVE_FILTERS, type ParityFieldType, type ParityFieldTypeDescriptor, type PerValueAccessWord, type PermissionLevel, type 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 PortalArchiveAnswer, type PortalArchiveFilter, type PortalCard, type PortalInvitation, type PortalPreviewRow, type PortalPrincipal, type PortalRevocation, type PortalSummary, type PortalTableExposure, type PortalTableRef, type PredictedRefusal, type ProvenancePointer, type PublishBinding, type QueuedCapture, type QueuedCaptureFile, type QueuedCaptureState, type QuietHours, REFUSALS_WORTH_REPEATING, RELATION_BINDINGS, RELATION_CARDINALITIES, RELATION_FLAVORS, RETIRED_ACTOR_WORDS, RULE_NODE_KINDS, RULE_USES, type ReadRow, type ReadValue, type RecordComment, type RecordDocument, type RecordFilter, type RecordHistoryEntry, type RecordRead, type RecordRevision, type RecordScopeComment, type RecordScopeContext, type RecordScopeField, type RecordScopeHistoryEntry, type RecordScopeRelation, type RecordScopeWithheld, type RecordsActor, type RecordsChangeSink, type RecordsConfig, type RecordsDataSource, type RecordsError, type RecordsErrorCode, type RecordsErrorSink, type RecordsFilter, RecordsProvider, type RecordsProviderProps, type RecordsRealtimePort, type RecordsResolverPort, type RecordsResponse, type RecordsResult, type RecordsTableQuery, type RegisteredTable, type Relation, type RelationBinding, type RelationCardinality, type RelationCarries, type RelationCoordinate, type RelationDisplay, type RelationFlavor, type RelationProperties, type RelationTarget, type ResolutionTriple, type ResolvedPublishBinding, type RestorePreview, type RestoreResult, type RetiredActorWord, type Rule, type RuleAnswer, type RuleExpression, type RuleNodeKind, type RuleUse, STAGE_RULE_ENFORCEMENT, STAGE_RULE_ON_FAIL, STORAGE_MODES, STORE_DOORS, STORE_KNOBS, STORE_REFUSAL_CODES, type SavedViewRow, type SavedViewSpecIn, type StagePending, type StagePendingOnBoard, type StageRuleEnforcement, type StageRuleOnFail, type StageRuleWarning, type StaleWriteDetail, type StorageMode, type StoreDoorName, type StoreRefusalCode, type StoredRecord, type StuckRow, type Subscription, type SubscriptionBlock, type SubscriptionCadence, type SubscriptionSpec, TABLE_DISPLAYS, TABLE_ORIGINS, TABLE_TYPES, type Table, type TableArchiveProgress, type TableCapacity, type TableDisplay, type TableOrigin, type TableProposal, type TableType, type Timestamp, type UseEntityFieldMutation, type UseFieldMutation, type UseRecordMutation, type UseRecordsOptions, type UseRecordsState, type UseTableArchive, type Uuid, VALUE_ALTERNATE_KEYS, VALUE_ENVELOPE_KEYS, type ValueAlternate, type ValueAlternateKey, type ValueEnvelope, type ValueEnvelopeKey, type ValueSource, 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, type WriteConflict, archivedByLine, archivedWhen, asPermissionLevel, atLeast, bookingPath, choiceSlug, choiceValuesOf, choicesOf, coerceTypedAnswer, coerceTypedAnswers, coercionLabel, emptyArchiveLine, emptyPortalArchiveLine, err, fieldKindFor, forgetAllOps, highestLevel, holdsARetiredChoice, indexedDbStore, isArchiveLane, isDecided, isOwnOp, isPortalArchiveFilter, isRecordsErr, isTheChosen, looksLikeAnId, mayDrag, measureKey, memoryStore, mintClientKey, mintOpId, ok, openCaptureQueue, optionKey, optionLabel, portalArchiveConsequence, portalConfirmLine, portalPath, portalTitleTypedBack, publicFormPath, rememberedOpCount, sameDocument, scopeChip, stableFilterKey, tableShapeChanged, useEntityFieldMutation, useEntityFieldRights, useEntityFields, useEntityRecord, useEntityTable, useFieldMutation, useFields, useMergeField, useMyLevel, useMyLevels, useOptionalRecordsClient, useRecord, useRecordMutation, useRecords, useRecordsActor, useRecordsClient, useTable, useTableArchive, useTables };