@ai-matrx/records 0.49.0 → 0.52.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.
@@ -54,6 +54,46 @@ var OVERRIDE_POLICIES = [
54
54
  var FRESHNESS = ["live", "cached", "snapshot"];
55
55
  var TABLE_DISPLAYS = ["list", "grid", "board", "calendar", "timeline"];
56
56
 
57
+ // src/archive.ts
58
+ var ARCHIVE_LANES = ["mine", "org"];
59
+ var DEFAULT_ARCHIVE_LANE = "org";
60
+ var ARCHIVE_LANE_LABEL = {
61
+ mine: "Archived by me",
62
+ org: "Archived by anyone"
63
+ };
64
+ var ARCHIVE_LANE_MEANS = {
65
+ mine: "The records you archived yourself.",
66
+ org: "Everything anybody in this organization archived, including you."
67
+ };
68
+ function isArchiveLane(word) {
69
+ return typeof word === "string" && ARCHIVE_LANES.includes(word);
70
+ }
71
+ function archivedWhen(at, locale = "en-GB") {
72
+ const when = new Date(at);
73
+ if (Number.isNaN(when.getTime())) return "a moment nobody recorded";
74
+ return new Intl.DateTimeFormat(locale, {
75
+ day: "numeric",
76
+ month: "long",
77
+ year: "numeric",
78
+ hour: "2-digit",
79
+ minute: "2-digit"
80
+ }).format(when);
81
+ }
82
+ function archivedByLine(row, locale = "en-GB") {
83
+ const when = archivedWhen(row.archivedAt, locale);
84
+ const who = (row.archivedByName ?? "").trim();
85
+ if (who === "") {
86
+ return `Archived on ${when}. The store does not know who archived it \u2014 whoever did is no longer in this organization, or it happened before this table kept that.`;
87
+ }
88
+ return `Archived by ${who} on ${when}.`;
89
+ }
90
+ function emptyArchiveLine(lane) {
91
+ return lane === "mine" ? "You have not archived anything in this table. Switch to \u201CArchived by anyone\u201D to see what the rest of the organization has." : "Nothing in this table has been archived. Records you remove from the grid arrive here, and nothing is ever destroyed.";
92
+ }
93
+ function sameDocument(a, b) {
94
+ return JSON.stringify(a) === JSON.stringify(b);
95
+ }
96
+
57
97
  // src/level.ts
58
98
  var PERMISSION_LEVELS = [
59
99
  "viewer",
@@ -347,6 +387,24 @@ function publicFormPath(formId) {
347
387
  function portalPath(slug) {
348
388
  return `/portal/c/${slug}`;
349
389
  }
390
+ var PORTAL_ARCHIVE_FILTERS = ["active", "archived", "all"];
391
+ var DEFAULT_PORTAL_ARCHIVE_FILTER = "active";
392
+ function isPortalArchiveFilter(word) {
393
+ return typeof word === "string" && PORTAL_ARCHIVE_FILTERS.includes(word);
394
+ }
395
+ function portalArchiveConsequence(title, signedIn, invited) {
396
+ const people = invited === 0 ? "Nobody is invited to it" : signedIn === 0 ? `The ${invited} ${invited === 1 ? "person" : "people"} invited to it will not be able to sign in` : `The ${signedIn} ${signedIn === 1 ? "person" : "people"} signed in to it, and the ${invited - signedIn} still invited, will not be able to sign in`;
397
+ return `\u201C${title}\u201D will leave your portal list. ${people}, and their invitation links will say this portal was archived and can be restored. Nothing is deleted \u2014 every Table it shows and everyone invited to it is kept exactly as it is, and you can restore it at any time.`;
398
+ }
399
+ function portalConfirmLine(title) {
400
+ return `Type the portal\u2019s title \u2014 ${title} \u2014 to confirm you mean this one.`;
401
+ }
402
+ function portalTitleTypedBack(typed, title) {
403
+ return typed.trim() === (title ?? "").trim();
404
+ }
405
+ function emptyPortalArchiveLine() {
406
+ return "No portal of this organization has been archived. A portal you put away waits here until somebody restores it, and nothing is ever destroyed.";
407
+ }
350
408
 
351
409
  // src/aggregate.ts
352
410
  function measureKey(measure) {
@@ -717,6 +775,27 @@ var PARITY_FIELD_TYPES = [
717
775
  { parity_type: "select", behavior: "list", made_of: "one choice from a Table shown as a list (FLD-5/FLD-6)" },
718
776
  { parity_type: "url", behavior: "text", made_of: "text whose format is url, with the pattern Rule that makes the format enforceable" }
719
777
  ];
778
+ var DECLARABLE_FIELD_KINDS = [
779
+ { kind: "attachment", behavior: "relation", parity: true, made_of: "REC-31: a File record reached through a relation, target the kernel `File` Table" },
780
+ { kind: "checkbox", behavior: "boolean", parity: true, made_of: "a ticked or unticked answer, stored as a REAL boolean \u2014 and a record that never answered holds neither, so filters and group-by see three states, not two" },
781
+ { kind: "currency", behavior: "range", parity: true, made_of: "FLD-N-1: a number whose UNIT is the currency and whose format is currency \u2014 on the Field, never in presentation" },
782
+ { kind: "datetime", behavior: "range", parity: true, made_of: "a range of kind date or datetime \u2014 the dated modifier says the VALUES are dated, which is a different question" },
783
+ { kind: "email", behavior: "text", parity: true, made_of: "text whose format is email" },
784
+ { kind: "formula", behavior: "formula", parity: true, made_of: "FLD-9: a declared computation, on read or on write, evaluated by custom.rule_eval" },
785
+ { kind: "long_text", behavior: "text", parity: false, made_of: "behaviour text with format long and config.multiline, for several lines rather than one" },
786
+ { kind: "lookup", behavior: "formula", parity: true, made_of: "a Value read THROUGH a relation \u2014 config.via names the relation field, config.pick the Value on the far side" },
787
+ { kind: "member", behavior: "relation", parity: true, made_of: "a person: a relation whose target is the kernel `Person` Table" },
788
+ { kind: "multi_select", behavior: "list", parity: true, made_of: "many choices from the same Table \u2014 the multi modifier, never a second behaviour" },
789
+ { kind: "number", behavior: "range", parity: false, made_of: "a plain number: behaviour range with no date kind and neither the currency nor the percent format" },
790
+ { kind: "percent", behavior: "range", parity: true, made_of: "a number whose unit is % and whose format is percent" },
791
+ { kind: "phone", behavior: "text", parity: true, made_of: "text whose format is phone" },
792
+ { kind: "relation", behavior: "relation", parity: false, made_of: "REL / FLD-11: a relation a person aims themselves \u2014 relation_target names a Table of this organization, and it is a BEHAVIOUR, never a parity type of its own" },
793
+ { kind: "rollup", behavior: "formula", parity: true, made_of: "an aggregate ALONG a relation \u2014 config.via, config.of, config.agg; far-side ids are taken DISTINCT, so nothing is counted twice" },
794
+ { kind: "select", behavior: "list", parity: true, made_of: "one choice from a Table shown as a list (FLD-5/FLD-6)" },
795
+ { kind: "signature", behavior: "text", parity: false, made_of: "VAL-10: behaviour text whose format is signature \u2014 the one shape custom.doc_sign accepts, sealed by custom.doc_signature_write and checked by custom.doc_signature_intact" },
796
+ { kind: "text", behavior: "text", parity: false, made_of: "plain text: behaviour text with no format \u2014 it carries no parity type, which is exactly what custom.parity_type answers for it" },
797
+ { kind: "url", behavior: "text", parity: true, made_of: "text whose format is url, with the pattern Rule that makes the format enforceable" }
798
+ ];
720
799
  var RULE_NODE_KINDS = [
721
800
  { node: "actor_at_least", evaluated_by: "PIPELINES" },
722
801
  { node: "add", evaluated_by: "W1-RULE" },
@@ -952,6 +1031,7 @@ var STORE_DOORS = [
952
1031
  { name: "field_dependants", args: "p_organization_id uuid, p_field_id uuid", returns: "TABLE(kind text, dependant_id uuid, label text, how text)", security: "definer" },
953
1032
  { name: "field_history", args: "p_organization_id uuid, p_table_id uuid, p_field_key text, p_limit integer DEFAULT 100, p_offset integer DEFAULT 0, p_record_id uuid DEFAULT NULL::uuid", returns: "TABLE(record_id uuid, record_title text, version integer, occurred_at timestamp with time zone, operation_label text, actor jsonb, before jsonb, after jsonb)", security: "definer" },
954
1033
  { name: "field_kernel_id", args: "", returns: "uuid", security: "invoker" },
1034
+ { name: "field_kinds", args: "", returns: "TABLE(kind text, behavior text, parity boolean, made_of text)", security: "invoker" },
955
1035
  { name: "field_options", args: "p_organization_id uuid, p_field_id uuid", returns: "SETOF custom.record", security: "definer" },
956
1036
  { name: "field_retire", args: "p_organization_id uuid, p_field_id uuid", returns: "boolean", security: "definer" },
957
1037
  { name: "field_rules", args: "p_field_data jsonb", returns: "TABLE(kind text, spec jsonb)", security: "invoker" },
@@ -1000,6 +1080,7 @@ var STORE_DOORS = [
1000
1080
  { name: "io_export", args: "p_organization_id uuid, p_table_id uuid, p_columns text[] DEFAULT NULL::text[], p_limit integer DEFAULT 10000, p_required text DEFAULT 'viewer'::text", returns: "jsonb", security: "definer" },
1001
1081
  { name: "io_export_csv", args: "p_organization_id uuid, p_table_id uuid, p_columns text[] DEFAULT NULL::text[], p_limit integer DEFAULT 10000, p_delimiter text DEFAULT chr(44), p_required text DEFAULT 'viewer'::text", returns: "text", security: "definer" },
1002
1082
  { name: "io_import_begin", 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", returns: "jsonb", security: "definer" },
1083
+ { name: "io_import_declare_columns", args: "p_organization_id uuid, p_table_id uuid, p_rows jsonb, p_mapping jsonb DEFAULT '{}'::jsonb", returns: "jsonb", security: "definer" },
1003
1084
  { name: "io_import_finish", args: "p_organization_id uuid, p_import_id uuid, p_unmapped text DEFAULT NULL::text", returns: "jsonb", security: "definer" },
1004
1085
  { name: "io_import_forget", args: "p_organization_id uuid, p_import_id uuid", returns: "boolean", security: "definer" },
1005
1086
  { name: "io_import_open", 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", returns: "uuid", security: "definer" },
@@ -1033,6 +1114,7 @@ var STORE_DOORS = [
1033
1114
  { name: "levels_raised_by_a_less_specific_rung", args: "", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, member_email text, record_id uuid, addressed_level permission_level, answered_level permission_level)", security: "definer" },
1034
1115
  { name: "list_door_disagreements", args: "p_pretend text DEFAULT NULL::text, p_only_organization uuid DEFAULT NULL::uuid, p_sample integer DEFAULT 200", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)", security: "invoker" },
1035
1116
  { name: "list_door_disagreements", args: "p_pretend text, p_only_organization uuid, p_sample integer, p_exhaustive boolean", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)", security: "invoker" },
1117
+ { name: "list_portals", args: "p_organization_id uuid, p_archived text DEFAULT 'active'::text", 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)", security: "definer" },
1036
1118
  { name: "lookup_value", args: "p_organization_id uuid, p_record_id uuid, p_field_data jsonb", returns: "jsonb", security: "invoker" },
1037
1119
  { name: "mask_document", args: "p_document jsonb, p_visible_keys text[], p_notices jsonb, p_by_id boolean DEFAULT false, p_key_ids jsonb DEFAULT '{}'::jsonb", returns: "jsonb", security: "invoker" },
1038
1120
  { name: "mask_document", args: "p_document jsonb, p_visible_keys text[], p_notices jsonb, p_by_id boolean DEFAULT false, p_key_ids jsonb DEFAULT '{}'::jsonb, p_declared_keys text[] DEFAULT NULL::text[]", returns: "jsonb", security: "invoker" },
@@ -1082,16 +1164,19 @@ var STORE_DOORS = [
1082
1164
  { name: "pipeline_read", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
1083
1165
  { name: "pipeline_transition_refusal", args: "p_organization_id uuid, p_record_id uuid, p_to text", returns: "jsonb", security: "definer" },
1084
1166
  { name: "portal_admits", args: "p_organization_id uuid, p_user_id uuid DEFAULT NULL::uuid", returns: "boolean", security: "definer" },
1167
+ { name: "portal_archive", args: "p_organization_id uuid, p_portal_id uuid, p_confirm_title text, p_reason text DEFAULT NULL::text", returns: "jsonb", security: "definer" },
1085
1168
  { name: "portal_card", args: "p_organization_id uuid, p_portal_id uuid", returns: "jsonb", security: "definer" },
1086
1169
  { name: "portal_declare", args: "p_organization_id uuid, p_title text, p_client_table_id uuid, p_tables jsonb, p_portal_id uuid DEFAULT NULL::uuid, p_slug text DEFAULT NULL::text, p_sign_in_method text DEFAULT 'magic_link'::text", returns: "uuid", security: "definer" },
1087
1170
  { name: "portal_field_map", args: "p_organization_id uuid, p_table_id uuid", returns: "TABLE(field_id uuid, field_key text, field_type text, points_at uuid)", security: "definer" },
1088
1171
  { name: "portal_invitation", args: "p_slug text, p_email text", returns: "jsonb", security: "definer" },
1089
1172
  { name: "portal_invite", args: "p_organization_id uuid, p_portal_id uuid, p_client_record_id uuid, p_email text, p_user_id uuid DEFAULT NULL::uuid", returns: "jsonb", security: "definer" },
1173
+ { name: "portal_invite_accept", args: "p_token text", returns: "jsonb", security: "definer" },
1090
1174
  { name: "portal_me", args: "", returns: "jsonb", security: "definer" },
1091
1175
  { name: "portal_preview", args: "p_organization_id uuid, p_portal_id uuid, p_principal_id uuid, p_table_id uuid", returns: "TABLE(record_id uuid, title text)", security: "definer" },
1092
1176
  { name: "portal_principal_bind", args: "p_organization_id uuid, p_principal_id uuid, p_user_id uuid", returns: "jsonb", security: "definer" },
1093
1177
  { name: "portal_public", args: "p_slug text", returns: "jsonb", security: "definer" },
1094
1178
  { name: "portal_record_title", args: "p_organization_id uuid, p_record_id uuid", returns: "text", security: "definer" },
1179
+ { name: "portal_restore", args: "p_organization_id uuid, p_portal_id uuid, p_confirm_title text", returns: "jsonb", security: "definer" },
1095
1180
  { name: "portal_revoke", args: "p_organization_id uuid, p_portal_id uuid, p_principal_id uuid", returns: "jsonb", security: "definer" },
1096
1181
  { name: "portal_slug", args: "p_organization_id uuid, p_title text, p_portal_id uuid DEFAULT NULL::uuid", returns: "text", security: "definer" },
1097
1182
  { name: "portal_tables", args: "p_organization_id uuid", returns: "TABLE(portal_id uuid, table_id uuid, name text)", security: "definer" },
@@ -1139,15 +1224,18 @@ var STORE_DOORS = [
1139
1224
  { name: "read_paths_outside_the_door", args: "", returns: "TABLE(object_name text, why text)", security: "invoker" },
1140
1225
  { name: "read_record", args: "p_organization_id uuid, p_record_id uuid, p_by_id boolean DEFAULT false", returns: "jsonb", security: "definer" },
1141
1226
  { name: "read_records", args: "p_organization_id uuid, p_table_id uuid, p_by_id boolean DEFAULT false, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(id uuid, document jsonb, level permission_level)", security: "definer" },
1227
+ { name: "read_records_archived", args: "p_organization_id uuid, p_table_id uuid, p_lane text DEFAULT 'org'::text, p_by_id boolean DEFAULT false, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(id uuid, document jsonb, level permission_level, archived_at timestamp with time zone, archived_by uuid, archived_by_name text)", security: "definer" },
1142
1228
  { name: "read_records_by_ids", args: "p_organization_id uuid, p_table_id uuid, p_record_ids uuid[], p_by_id boolean DEFAULT false", returns: "TABLE(id uuid, document jsonb, level permission_level)", security: "definer" },
1143
1229
  { name: "read_records_matching", args: "p_organization_id uuid, p_table_id uuid, p_filter jsonb DEFAULT '{}'::jsonb, p_by_id boolean DEFAULT false, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(id uuid, document jsonb, level permission_level)", security: "definer" },
1144
1230
  { name: "realtime_topic_admits", args: "p_topic text", returns: "boolean", security: "definer" },
1145
1231
  { name: "record_aggregate", args: "p_organization_id uuid, p_table_id uuid, p_group_by jsonb DEFAULT '[]'::jsonb, p_measures jsonb DEFAULT '[]'::jsonb, p_bucket jsonb DEFAULT NULL::jsonb, p_filter jsonb DEFAULT '{}'::jsonb, p_limit integer DEFAULT 200, p_required text DEFAULT 'viewer'::text", returns: "TABLE(groups jsonb, measures jsonb, row_count bigint)", security: "definer" },
1146
1232
  { name: "record_applicability", args: "p_organization_id uuid, p_record_id uuid", returns: "TABLE(rule_id uuid, rule_name text, rule_version integer, applies boolean, answer jsonb)", security: "invoker" },
1233
+ { name: "record_archiver", args: "p_organization_id uuid, p_record_id uuid", returns: "uuid", security: "definer" },
1147
1234
  { name: "record_as_of", args: "p_organization_id uuid, p_record_id uuid, p_at timestamp with time zone", returns: "TABLE(state jsonb, replayed boolean)", security: "definer" },
1148
1235
  { name: "record_card", args: "p_viewer uuid, p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "definer" },
1149
1236
  { name: "record_carrying_edges", args: "p_id uuid, p_data_class text, p_data jsonb, p_deleted_at timestamp with time zone", returns: "TABLE(container_id uuid, item_id uuid, edge_role text)", security: "invoker" },
1150
1237
  { name: "record_delete", args: "p_organization_id uuid, p_record_id uuid", returns: "timestamp with time zone", security: "definer" },
1238
+ { name: "record_filter_sql", args: "p_filter jsonb", returns: "text", security: "invoker" },
1151
1239
  { name: "record_history", args: "p_organization_id uuid, p_record_id uuid, p_limit integer DEFAULT 200, p_offset integer DEFAULT 0", returns: "TABLE(version integer, occurred_at timestamp with time zone, operation text, operation_label text, actor jsonb, changes jsonb, migration_id uuid, undoable boolean)", security: "definer" },
1152
1240
  { name: "record_platform_keys", args: "", returns: "text[]", security: "invoker" },
1153
1241
  { name: "record_relation_edges", args: "p_organization_id uuid, p_id uuid, p_table_id uuid, p_data_class text, p_data jsonb, p_deleted_at timestamp with time zone", returns: "TABLE(target_id uuid, edge_role text, field_id uuid, ord integer)", security: "invoker" },
@@ -1236,6 +1324,7 @@ var STORE_DOORS = [
1236
1324
  { name: "subscription_mute", args: "p_organization_id uuid, p_rule_id uuid, p_muted boolean DEFAULT true", returns: "boolean", security: "definer" },
1237
1325
  { name: "subscription_preview", args: "p_organization_id uuid, p_rule_id uuid", returns: "jsonb", security: "definer" },
1238
1326
  { name: "subscriptions", args: "p_organization_id uuid, p_table_id uuid DEFAULT NULL::uuid", returns: "TABLE(rule_id uuid, name text, table_id uuid, saved_view_id uuid, cadence text, schedule text, quiet_hours jsonb, channel text, recipient_user_id uuid, event_key text, muted boolean, mine boolean, i_may_mute boolean, last_sent_at timestamp with time zone, next_digest_at timestamp with time zone)", security: "definer" },
1327
+ { name: "table_archive", args: "p_organization_id uuid, p_table_id uuid, p_chunk integer DEFAULT 50, p_include_table boolean DEFAULT true", returns: "jsonb", security: "definer" },
1239
1328
  { name: "table_capacity", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
1240
1329
  { name: "table_carries_its_rows", args: "p_user_id uuid, p_table_id uuid, p_required permission_level DEFAULT 'viewer'::permission_level", returns: "boolean", security: "definer" },
1241
1330
  { name: "table_column_source", args: "p_organization_id uuid, p_table_id uuid", returns: "text", security: "invoker" },
@@ -1368,18 +1457,18 @@ var STORE_KNOBS = [
1368
1457
  { key: "world_publish_enabled", value: "false", type: "boolean" }
1369
1458
  ];
1370
1459
  var STORE_REFUSAL_CODES = [
1371
- { code: "02000", raised_by: "_checklist_instantiate,_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_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_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" },
1460
+ { code: "02000", 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" },
1372
1461
  { code: "0A000", 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" },
1373
1462
  { code: "22003", raised_by: "context_resolve" },
1374
- { code: "22004", raised_by: "_entity_custom_fields_guard,_value_envelope,actor_word,agg_assert_key,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,dashboard_block_normalize,dashboard_declare,dashboard_window_sql,doc_render_write,doc_sign,doc_signature_write,doc_template_save,enrich_land,enrich_normalize,external_history_event,external_rows,external_source_declare,external_stub_upsert,external_write_through,external_writes_set,field_history,form_declare,form_submit,home_add,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,pipeline_gate_preview,portal_declare,portal_invite,portal_principal_bind,provenance_retention_days,provenance_write,query_across_homes,query_by_coordinates,query_rollup,record_delete,record_reparent,record_resolve,record_restore,record_update,record_write,record_write_many,relation_carry,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_declare,table_share_outside_invite,value_restore,view_declare,work_approval_decide,work_approval_request,work_template_declare" },
1463
+ { code: "22004", raised_by: "_entity_custom_fields_guard,_share_write_person,_value_envelope,actor_word,agg_assert_key,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,dashboard_block_normalize,dashboard_declare,dashboard_window_sql,doc_render_write,doc_sign,doc_signature_write,doc_template_save,enrich_land,enrich_normalize,external_history_event,external_rows,external_source_declare,external_stub_upsert,external_write_through,external_writes_set,field_history,form_declare,form_submit,home_add,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,pipeline_gate_preview,portal_declare,portal_invite,portal_principal_bind,provenance_retention_days,provenance_write,query_across_homes,query_by_coordinates,query_rollup,record_delete,record_reparent,record_resolve,record_restore,record_update,record_write,record_write_many,relation_carry,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_archive,table_declare,table_share_outside_invite,value_restore,view_declare,work_approval_decide,work_approval_request,work_template_declare" },
1375
1464
  { code: "22007", raised_by: "dashboard_window_sql" },
1376
1465
  { code: "22012", raised_by: "rule_eval" },
1377
- { code: "22023", 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,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" },
1378
- { code: "23503", raised_by: "_booking_availability,_checklist_instantiate,_containment_guard,_display_spec_for,_field_document_for,_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" },
1379
- { code: "23505", raised_by: "_unique_rule_holds,doc_sign,doc_signature_write,entity_field_declare,field_declare,home_add,inbound_declare,io_proposal_accept,relation_carry,relation_own,share_grant,sign_request_cancel,sign_request_create,table_share_outside_invite,table_share_outside_resend,work_approval_decide,work_slot_hold" },
1380
- { code: "23514", 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_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" },
1466
+ { code: "22023", 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" },
1467
+ { code: "23503", 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" },
1468
+ { code: "23505", 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" },
1469
+ { code: "23514", 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" },
1381
1470
  { code: "40001", raised_by: "has_visibility_at" },
1382
- { code: "42501", raised_by: "_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_rule_definition_write,_store_door,anon_capture,anon_inbound_land,anon_publish,anon_token_issue,anon_token_verify,anon_write,assert_client_may_change,assert_client_may_open,assert_client_may_reach,assert_may_know_table,assert_organization_admin,assert_store_door,booking_confirm,booking_declare,booking_hold,capture_submit,checklist_run,comment_write,conversation_scope_bind,conversation_scope_unbind,enrich_declare,enrich_due,enrich_land,enrich_normalize,entity_field_declare,entity_field_retire,entity_field_update,entity_value_write,external_write_through,form_declare,form_submit,inbound_mail_land,io_comment_resolve,io_comment_write,io_import_begin,io_import_finish,io_restore,migrate_purge,migrate_reclass,my_levels,organization_clear,portal_declare,portal_invitation,portal_invite,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,read_records_by_ids,record_table,share_grant,subscription_mute,subscription_preview,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_person" },
1471
+ { code: "42501", raised_by: "_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_rule_definition_write,_store_door,agent_table_claim,anon_capture,anon_inbound_land,anon_publish,anon_token_issue,anon_token_verify,anon_write,assert_client_may_change,assert_client_may_open,assert_client_may_reach,assert_may_know_table,assert_organization_admin,assert_store_door,booking_confirm,booking_declare,booking_hold,capture_submit,checklist_run,comment_write,conversation_scope_bind,conversation_scope_unbind,doc_sign,enrich_declare,enrich_due,enrich_land,enrich_normalize,entity_field_declare,entity_field_retire,entity_field_update,entity_value_write,external_write_through,form_declare,form_submit,inbound_mail_land,io_comment_resolve,io_comment_write,io_import_begin,io_import_finish,io_restore,migrate_purge,migrate_reclass,my_levels,organization_clear,portal_declare,portal_invitation,portal_invite,portal_invite_accept,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,read_records_archived,read_records_by_ids,read_records_matching,record_table,share_grant,subscription_mute,subscription_preview,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_person" },
1383
1472
  { code: "42703", raised_by: "entity_table,portal_declare" },
1384
1473
  { code: "53400", raised_by: "anon_rate_take,delete_cascade_closure,enrich_due,enrich_land,promote_field" },
1385
1474
  { code: "54001", raised_by: "record_delete" },
@@ -2275,6 +2364,7 @@ var ENTITY_TOKENS = [
2275
2364
  "template_scope_types",
2276
2365
  "templates",
2277
2366
  "test_handset_inbox",
2367
+ "test_handset_verification",
2278
2368
  "thread",
2279
2369
  "tool",
2280
2370
  "tool_binding",
@@ -2484,6 +2574,14 @@ var DOORS = {
2484
2574
  // `custom.record_filter_sql`, the one body `custom.agg_sql` also calls, so the
2485
2575
  // rows it opens are the rows the number counted.
2486
2576
  readRecordsMatching: "read_records_matching",
2577
+ // THE SAME READ DOOR, ADDRESSED BY ABSENCE. Every door above answers LIVE rows
2578
+ // only — each of them hard-codes `and r.deleted_at is null` — so until this one
2579
+ // existed no screen could list an archived record however it was written, and
2580
+ // `record_restore` below had nothing that could reach it (VERIFIER-10 F4).
2581
+ // `custom.read_records_archived` is that body with the sign of one comparison
2582
+ // flipped, plus the two facts only an archive needs: who archived it and when.
2583
+ // A separate NAME for the same reason as its two siblings above.
2584
+ readRecordsArchived: "read_records_archived",
2487
2585
  // DOOR-8, the two clocks. `p_recorded_at` is what the store SAID then;
2488
2586
  // `p_world_on` is what was TRUE of the world on that date, read out of dated
2489
2587
  // values. A client that answered either one itself would be guessing.
@@ -2630,6 +2728,7 @@ var DOORS = {
2630
2728
  // ways to start an import from one client is how they drift.
2631
2729
  importPlan: "io_import_plan",
2632
2730
  importBegin: "io_import_begin",
2731
+ importDeclareColumns: "io_import_declare_columns",
2633
2732
  importRows: "io_import_rows",
2634
2733
  importFinish: "io_import_finish",
2635
2734
  importReport: "io_import_report",
@@ -2666,6 +2765,17 @@ var DOORS = {
2666
2765
  portalInvite: "portal_invite",
2667
2766
  portalRevoke: "portal_revoke",
2668
2767
  portalPreview: "portal_preview",
2768
+ // ORG-CLEANUP, 2026-09-22 — A PORTAL IS ARCHIVED, NEVER DELETED.
2769
+ // `portals` keeps its signature and HIDES archived portals (the law's default
2770
+ // is to hide); `list_portals(org, 'active'|'archived'|'all')` is the
2771
+ // archive-aware reader, taking the platform archive filter's own three values
2772
+ // so one door serves both lanes and no screen has to invent a second control.
2773
+ // `portal_archive` / `portal_restore` are the way out and the way back; both
2774
+ // take the portal's own title typed back, because ten portals can carry one
2775
+ // title and the title alone is not what picks this one.
2776
+ listPortals: "list_portals",
2777
+ portalArchive: "portal_archive",
2778
+ portalRestore: "portal_restore",
2669
2779
  // SCR-16 — the canvas. A dashboard is a record in the presentation kernel
2670
2780
  // whose blocks are saved SPECS for the eighth verb; `dashboardRun` walks them
2671
2781
  // under the CALLER'S principal, so nothing here is precomputed and nothing is
@@ -2778,7 +2888,14 @@ var DOORS = {
2778
2888
  docTokens: "doc_tokens",
2779
2889
  docUnresolvedTokens: "doc_unresolved_tokens",
2780
2890
  docSign: "doc_sign",
2781
- docSignatureIntact: "doc_signature_intact",
2891
+ // THE SEAL IS ASKED THROUGH ITS OWN DOOR. `custom.doc_signature_intact` is the INTERNAL
2892
+ // half of this pair — SECURITY INVOKER over a doors-only table, so a browser that calls it
2893
+ // gets `42501 permission denied for table doc_signature`, which is what every SignBlock
2894
+ // seal check got until 2026-09-22 (FIX-10B). `custom.doc_signature_read` is the definer
2895
+ // door built for a client: it asks may_reach and may_open on the RECORD by name and
2896
+ // returns the seal AND the verdict in one answer, because a seal a person can read and a
2897
+ // verdict they cannot is how a changed agreement keeps wearing somebody's signature.
2898
+ docSignatureRead: "doc_signature_read",
2782
2899
  // THE PLURAL ACTS. Until 2026-09-20 this package read `custom.doc_template`,
2783
2900
  // `custom.doc_render` and `custom.doc_signature` with a direct PostgREST
2784
2901
  // `.from()`, and all three hold NO client SELECT — so every list in product #5
@@ -3183,6 +3300,34 @@ function createRecordsClient(config) {
3183
3300
  })
3184
3301
  );
3185
3302
  },
3303
+ async listArchived({ table_id, lane = DEFAULT_ARCHIVE_LANE, limit = 50, offset = 0 }) {
3304
+ const door = await callDoor(
3305
+ DOORS.readRecordsArchived,
3306
+ {
3307
+ p_organization_id: org,
3308
+ p_table_id: table_id,
3309
+ p_lane: lane,
3310
+ p_limit: limit,
3311
+ p_offset: offset
3312
+ },
3313
+ "listArchived"
3314
+ );
3315
+ if (!door.ok) return err(door.error);
3316
+ const rows = (door.data ?? []).map((row) => {
3317
+ const { document, hidden } = unfold(row.document);
3318
+ return {
3319
+ id: row.id,
3320
+ document,
3321
+ level: row.level,
3322
+ hidden,
3323
+ archivedAt: row.archived_at,
3324
+ archivedBy: row.archived_by ?? null,
3325
+ archivedByName: row.archived_by_name ?? null
3326
+ };
3327
+ });
3328
+ const total = rows.length < limit ? offset + rows.length : null;
3329
+ return ok({ rows, total });
3330
+ },
3186
3331
  async list({ table_id, filter, limit = 50, offset = 0 }) {
3187
3332
  const door = await callDoor(
3188
3333
  DOORS.readRecordsMatching,
@@ -3672,6 +3817,18 @@ function createRecordsClient(config) {
3672
3817
  "importBegin"
3673
3818
  );
3674
3819
  },
3820
+ async importDeclareColumns(args) {
3821
+ return callDoor(
3822
+ DOORS.importDeclareColumns,
3823
+ {
3824
+ p_organization_id: org,
3825
+ p_table_id: args.table_id,
3826
+ p_rows: args.rows,
3827
+ p_mapping: args.mapping ?? {}
3828
+ },
3829
+ "importDeclareColumns"
3830
+ );
3831
+ },
3675
3832
  async importRows(args) {
3676
3833
  return callDoor(
3677
3834
  DOORS.importRows,
@@ -3742,6 +3899,36 @@ function createRecordsClient(config) {
3742
3899
  async portals() {
3743
3900
  return callDoor(DOORS.portals, { p_organization_id: org }, "portals");
3744
3901
  },
3902
+ async listPortals(args) {
3903
+ return callDoor(
3904
+ DOORS.listPortals,
3905
+ { p_organization_id: org, p_archived: args?.archived ?? "active" },
3906
+ "listPortals"
3907
+ );
3908
+ },
3909
+ async portalArchive(args) {
3910
+ return callDoor(
3911
+ DOORS.portalArchive,
3912
+ {
3913
+ p_organization_id: org,
3914
+ p_portal_id: args.portal_id,
3915
+ p_confirm_title: args.confirm_title,
3916
+ p_reason: args.reason ?? null
3917
+ },
3918
+ "portalArchive"
3919
+ );
3920
+ },
3921
+ async portalRestore(args) {
3922
+ return callDoor(
3923
+ DOORS.portalRestore,
3924
+ {
3925
+ p_organization_id: org,
3926
+ p_portal_id: args.portal_id,
3927
+ p_confirm_title: args.confirm_title
3928
+ },
3929
+ "portalRestore"
3930
+ );
3931
+ },
3745
3932
  async portalTables() {
3746
3933
  return callDoor(DOORS.portalTables, { p_organization_id: org }, "portalTables");
3747
3934
  },
@@ -4330,11 +4517,11 @@ function createRecordsClient(config) {
4330
4517
  "commentResolve"
4331
4518
  );
4332
4519
  },
4333
- async docSignatureIntact({ signature_id }) {
4520
+ async docSignatureRead({ signature_id }) {
4334
4521
  return callDoor(
4335
- DOORS.docSignatureIntact,
4522
+ DOORS.docSignatureRead,
4336
4523
  { p_organization_id: org, p_signature_id: signature_id },
4337
- "docSignatureIntact"
4524
+ "docSignatureRead"
4338
4525
  );
4339
4526
  },
4340
4527
  // ── the anonymous lane ───────────────────────────────────────────────
@@ -5333,10 +5520,16 @@ function fromMatrix(matrix) {
5333
5520
  export {
5334
5521
  ABSENCE_REASONS,
5335
5522
  ACTOR_VOCABULARY,
5523
+ ARCHIVE_LANES,
5524
+ ARCHIVE_LANE_LABEL,
5525
+ ARCHIVE_LANE_MEANS,
5336
5526
  COMPUTE_ON,
5337
5527
  CONTEXT_POLICIES,
5528
+ DECLARABLE_FIELD_KINDS,
5529
+ DEFAULT_ARCHIVE_LANE,
5338
5530
  DEFAULT_DOCUMENT_MAX_BYTES,
5339
5531
  DEFAULT_PAGE_SIZE,
5532
+ DEFAULT_PORTAL_ARCHIVE_FILTER,
5340
5533
  DEFAULT_VALUE_MAX_BYTES,
5341
5534
  DELIVERIES,
5342
5535
  DOORS,
@@ -5356,6 +5549,7 @@ export {
5356
5549
  PERMISSION_LEVELS,
5357
5550
  PER_VALUE_ACCESS_WORDS,
5358
5551
  PIPELINE_RULE_KINDS,
5552
+ PORTAL_ARCHIVE_FILTERS,
5359
5553
  REFUSALS_WORTH_REPEATING,
5360
5554
  RELATION_BINDINGS,
5361
5555
  RELATION_CARDINALITIES,
@@ -5374,6 +5568,8 @@ export {
5374
5568
  TABLE_TYPES,
5375
5569
  VALUE_ALTERNATE_KEYS,
5376
5570
  VALUE_ENVELOPE_KEYS,
5571
+ archivedByLine,
5572
+ archivedWhen,
5377
5573
  asPermissionLevel,
5378
5574
  asWriteConflict,
5379
5575
  atLeast,
@@ -5389,6 +5585,8 @@ export {
5389
5585
  doorAbsent,
5390
5586
  doorCensus,
5391
5587
  doorExists,
5588
+ emptyArchiveLine,
5589
+ emptyPortalArchiveLine,
5392
5590
  err,
5393
5591
  exportCsv,
5394
5592
  exportXlsx,
@@ -5400,8 +5598,10 @@ export {
5400
5598
  importXlsx,
5401
5599
  indexedDbStore,
5402
5600
  intersectIds,
5601
+ isArchiveLane,
5403
5602
  isDecided,
5404
5603
  isOwnOp,
5604
+ isPortalArchiveFilter,
5405
5605
  isRecordsErr,
5406
5606
  isTheChosen,
5407
5607
  looksLikeAnId,
@@ -5417,13 +5617,17 @@ export {
5417
5617
  optionLabel,
5418
5618
  parseCsv,
5419
5619
  planQuery,
5620
+ portalArchiveConsequence,
5621
+ portalConfirmLine,
5420
5622
  portalPath,
5623
+ portalTitleTypedBack,
5421
5624
  predictEnvelopeRefusal,
5422
5625
  predictSizeRefusal,
5423
5626
  predictValueRefusals,
5424
5627
  predictWriteRefusals,
5425
5628
  publicFormPath,
5426
5629
  rememberedOpCount,
5630
+ sameDocument,
5427
5631
  scopeChip,
5428
5632
  stableFilterKey,
5429
5633
  staleWriteDetail,